这适用于我的应用程序的早期版本,它基本上是完全相同的代码。唯一的区别是当前应用程序使用更高的构建工具和sdk编译版本,会导致代码出错吗?此外,该应用程序现在扩展了FragmentActivity而不是Activity。
其中一个错误是空指针异常,它来自logcat是由于ServerSocket(ss)为空。
另一个错误是libcore.io.ErrnoException:绑定失败:代码段中第8行的EADDRINUSE(地址已在使用中)
我尝试过实现ss.setReuseAddress(true),但由于未解决的符号问题,它无法正常工作?
任何想法或指示都将不胜感激!
class CommsThread implements Runnable {
private volatile boolean stopFlag = false;
private ServerSocket ss ;
private static final int SERVERPORT = 6000;
public void run() {
Socket s = null;
try {
ss = new ServerSocket(SERVERPORT); <-- bind error here
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG,"IO Error here"); <--- this is printed in log
}
try {
s = ss.accept(); <----- nullpointer exception here
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
myHandler.sendEmptyMessage(0);
while(stopFlag == false){
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream())), true);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
out.printf(String.valueOf(d.format(accel[0]))+"\t"+String.valueOf(d.format(accel[1]))+"\t"+String.valueOf(d.format(accel[2])) + "\tAccelerometer" + "\n");
out.printf(String.valueOf(d.format(gyro[0]))+"\t"+String.valueOf(d.format(gyro[1]))+"\t"+String.valueOf(d.format(gyro[2]))+ "\tGyroscope" + "\n");
out.printf(String.valueOf(d.format(magnet[0]))+"\t"+String.valueOf(d.format(magnet[1]))+"\t"+String.valueOf(d.format(magnet[2]))+"\tMagnetometer"+ "\n\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if( s==null)
{
stopComms();
}
*/
}
}
答案 0 :(得分:0)
NPE只是你自己的错误代码结构。真正的问题是绑定异常,这意味着其他东西正在侦听端口6000,可能是同一应用程序的先前实例。修复此问题,或使用其他端口。