【发布时间】:2015-06-29 14:46:16
【问题描述】:
所以,我正在编写一项大学作业,但我陷入了必须为 SocketServer 构建线程的部分,该线程为每个客户端连接打开新线程。这是java代码:
此方法与按钮的 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;
}
}
问题是:当按钮被点击时,Application 只是停止响应,好像 Application 和 SocketServer 在同一个 Thread 中运行,只是想知道发生了什么并解决它。
【问题讨论】:
-
你不应该在
startThread()方法中使用t.start()而不是t.run()吗? -
哇,真不敢相信我在这么愚蠢的错误上浪费了半个多小时,谢谢你的帮助。
标签: java multithreading javafx fxml