ServerSocket.accept()中的java.lang.nullpointerexception
我试图通过网络接收图像,我设置了一个服务器,如下所示ServerSocket.accept()中的java.lang.nullpointerexception,java,android,sockets,Java,Android,Sockets,我试图通过网络接收图像,我设置了一个服务器,如下所示 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; @Ov
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()处显示空指针异常强>行。
请帮助我,我不知道出了什么问题。如果您在该行遇到空指针异常,它只能表示前面的:
ss = new ServerSocket(SERVERPORT );
语句没有正常返回。这是ss
可能为null
的唯一可行方法
(实际上,还有一种可能的解释。由于
ss
变量是包私有的,而不是final
,同一个包中的其他一些类可以进入并将null
赋值给它。但我认为这是不合理的。为什么有人要编写代码来这样做?是“ss=new ServerSocket”(SERVERPORT);“引发异常?请检查控制台,是否执行了“e.printStackTrace();”否,“s=ss.accept();”引发了空指针异常。是的,执行了“e.printStackTrace()”。请帮助我解决此问题。。注意,“I”类名前面的字符通常指接口。这里的类不是接口。这只是一个观察。我该怎么做才能让“ss=newserversocket(SERVERPORT);”正常返回。除非您告诉我们它抛出了什么异常,否则无法确定。您已将stacktrace写入System.err…告诉我们它包含什么。