2012-07-09 112 views
0

我想通過網絡接收圖像,我設置了一個服務器,如下顯示java.lang.NullPointerException的ServerSocket.accept中的()

public class IServerActivity extends Activity { 
    ServerSocket ss = null; 
    Bitmap bp ; 
    Thread myCommsThread = null; 
    protected static final int MSG_ID = 0x1337; 
    public static final int SERVERPORT = 6000; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //TextView tv = (TextView) findViewById(R.id.TextView01);  
     this.myCommsThread = new Thread(new CommsThread()); 
     this.myCommsThread.start(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     try { 
     // make sure you close the socket upon exiting 
     ss.close(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 

    Handler myUpdateHandler = new Handler() { 
     public void handleMessage(Message msg) { 
     switch (msg.what) { 
     case MSG_ID: 
      ImageView iv = (ImageView) findViewById(R.id.imageView01); 
      iv.setImageBitmap(bp);; 
      break; 
     default: 
      break; 
     } 
     super.handleMessage(msg); 
     } 
    }; 
    class CommsThread implements Runnable { 
     public void run() { 
     Socket s = null; 
     try { 
      ss = new ServerSocket(SERVERPORT); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     while (!Thread.currentThread().isInterrupted()) { 
      Message m = new Message(); 
      m.what = MSG_ID; 
      try { 
       if (s == null) 
        s = ss.accept(); 
       bp= BitmapFactory.decodeStream(s.getInputStream()); 
       myUpdateHandler.sendMessage(m); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     } 
    } 
} 

但它顯示了在運行時錯誤

java.lang.NullPointerException 
E/AndroidRuntime(3047):atExample.IServer.IServerActivity$CommsThread.run(IServerActivity.java:68) 

它顯示空指針異常在s = ss.accept();一行。 請幫助我不知道什麼是錯的。

+0

is「ss = new ServerSocket(SERVERPORT);」拋出異常? PLease檢查控制檯是否「e.printStackTrace();」被執行 – 2012-07-09 06:46:50

+0

不,「s = ss.accept();」拋出一個空指針異常。並且是「e.printStackTrace()」被執行。 – Akshay 2012-07-09 06:54:23

+0

請幫我卡在這.. – Akshay 2012-07-09 06:55:06

回答

2

如果您收到該行一個空指針異常,它只能意味着早期:

ss = new ServerSocket(SERVERPORT); 

聲明沒有正常返回。這是唯一的合理的方式,ss可能是null


(其實,有一個其他可能解釋。由於ss變量是包私營和final,在同一個包中的一些其他類可以達到並分配null它。但我)

+0

和我能做些什麼來讓「ss = new ServerSocket(SERVERPORT);」正常返回。 – Akshay 2012-07-09 07:02:16

+1

除非你告訴我們拋出什麼異常,否則不可能說。你已經寫了一個堆棧跟蹤到System.err ...告訴我們它包含了什麼。 – 2012-07-09 08:32:30

相關問題