正在从主类调用的实用程序类的处理程序上出现null指针异常。套接字程序Android
我创建了两个类,第一个是服务器类,它运行线程等待并接受来自客户端的套接字连接 第二个类是EchoThread类,它启动一个新线程,获取套接字连接传递的文本消息。这样做的原因是因为需要这样做,以便我可以一次将多个客户端连接到服务器。所以我创建了这个类。在服务器类的while(true)循环中调用它,以便在建立连接时启动新线程 问题在于,此应用程序的logcat是EchoThread类的nullPointer异常,位于以下行:正在从主类调用的实用程序类的处理程序上出现null指针异常。套接字程序Android,android,multithreading,sockets,handler,Android,Multithreading,Sockets,Handler,我创建了两个类,第一个是服务器类,它运行线程等待并接受来自客户端的套接字连接 第二个类是EchoThread类,它启动一个新线程,获取套接字连接传递的文本消息。这样做的原因是因为需要这样做,以便我可以一次将多个客户端连接到服务器。所以我创建了这个类。在服务器类的while(true)循环中调用它,以便在建立连接时启动新线程 问题在于,此应用程序的logcat是EchoThread类的nullPointer异常,位于以下行: handler.post(new Runnable() { 为什么
handler.post(new Runnable() {
为什么我会收到此错误消息以及如何处理
服务器类:
public class ServerThread implements Runnable {
public void run() {
try {
if (SERVERIP != null) {
handler.post(new Runnable() {
@Override
public void run() {
serverStatus = "Listening on IP: " + SERVERIP;
}
});
serverSocket = new ServerSocket(SERVERPORT);
while (true) {
// listen for incoming clients
Socket client = serverSocket.accept();
handler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent();
intent.setAction("com.example.diceRolled");
intent.putExtra("serverStatus","Connected");
sendBroadcast(intent);
}
});
new EchoThread(Server.this, client).start();
} // end while(true) method
} else { // the rest of the code for Server class....
EchoThread类:
public class EchoThread extends Thread {
protected Socket socket;
private String line;
private Handler handler;
private Context context;
private Socket client;
public EchoThread(Context c, Socket clientSocket) {
this.socket = clientSocket;
this.context = c;
}
public void run(){
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
while ((line = in.readLine()) != null) {
// Log.d("ServerActivity", line);
handler.post(new Runnable() {
private String receivedCommand;
@Override
public void run() {
receivedCommand = line;
Intent intent = new Intent();
intent.setAction("com.example.diceRolled");
intent.putExtra("serverStatus", line.trim());
context.sendBroadcast(intent);
Toast.makeText(context, "sent message " + receivedCommand, Toast.LENGTH_SHORT).show();
// the rest of the code for EchoThread class....
您的处理程序保持为
null
,因为您将其作为类变量
private Handler handler;
但实际上你从来没有给过它任何东西
当你遇到
handler.post()
一个NPE被抛出
因此,您必须实例化处理程序
,或者给它一个非空的引用来保存
如果您想要更多关于处理程序和循环器的信息,并且可能有价值(与SO答案相同的链接)