Java “线程”;积木;或;停止“;在我的代码中的某一点-网络/服务器
代码在“等待…6”处停止。。由于某种原因,当我启动新线程时,当前线程就停止了。我试过几种不同的方法,但都没办法解决——我想我做错了很简单的事情Java “线程”;积木;或;停止“;在我的代码中的某一点-网络/服务器,java,multithreading,networking,Java,Multithreading,Networking,代码在“等待…6”处停止。。由于某种原因,当我启动新线程时,当前线程就停止了。我试过几种不同的方法,但都没办法解决——我想我做错了很简单的事情 我做错了什么?ClientHandler在其构造函数中做了什么?您尝试过单步执行代码吗?我刚刚发现,当ClientHandler执行此操作时,代码正在停止,oiStream=new ObjectInputStream(sock.getInputStream())。您可能希望将所有网络代码移动到ClientHandler的run方法中。好的,VGR,我会尝
我做错了什么?ClientHandler在其构造函数中做了什么?您尝试过单步执行代码吗?我刚刚发现,当ClientHandler执行此操作时,代码正在停止,oiStream=new ObjectInputStream(sock.getInputStream())。您可能希望将所有网络代码移动到ClientHandler的
run
方法中。好的,VGR,我会尝试一下。
public class ServerRunnable implements Runnable {
@Override
public void run() {
while (true) {
try {
System.out.println("Waiting...");
Socket sock = socket.accept();
System.out.println("Waiting... 2");
ObjectInputStream stream = new ObjectInputStream(sock.getInputStream());
Object object = stream.readObject();
System.out.println("Waiting... 3");
if (object instanceof Client) {
Client c = (Client) object;
conns.put(c, sock);
System.out.println("Waiting... 4");
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.flush();
System.out.println("Waiting... 5");
output.put(sock, oos);
sendMessage(new Message("[" + c.getClientType() + "] " + c.getName() + " connected."));
System.out.println("Waiting... 6");
threads.put(c, new Thread(new ClientHandler(sock, c)));
threads.get(c).start();
System.out.println("Waiting... 7");
updateClientList();
System.out.println("Waiting... 8");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}