所以,我正在编写一个大学作业,我陷入了一个必须为SocketServer构建一个Thread的部分,为每个客户端连接打开新的Threads。这是java代码:
此方法链接到Button的setOnAction:
void openServer(){
new ServerThread().startThread();
}
这是上述方法调用的方法:
public class ServerThread implements Runnable{
private ServerSocket serv;
@Override
public void run(){
try {
serv = new ServerSocket(1234);
while(true){
Socket sc = serv.accept();
System.out.println("Someone connected!");
Thread t = new Thread(new ClientThread(sc));
t.start();
}
} catch (IOException e) {
System.out.println("Erro no servidor");
}
}
void startThread(){
Thread t = new Thread(new ServerThread());
t.run();
}
}
这是上面代码调用的线程:
public class ClientThread implements Runnable{
private Socket sock;
@Override
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
while(true){
int cmd = in.read();
if(cmd == 1){
//REGISTER
} else if (cmd == 2){
//LOGIN
}
}
} catch (IOException e) {
System.out.println("Erro no socket");
}
}
public ClientThread(Socket s){
this.sock = s;
}
}
问题是:当单击按钮时,应用程序只是停止响应,就像应用程序和SocketServer在同一个线程上运行一样,只是想知道发生了什么并修复了它。
答案 0 :(得分:0)
错误在于startThread()
方法,对线程的调用应该是t.start()
,但我写了t.run()
。是的,我是那么愚蠢,感谢@James_D在评论中的帮助。