FXML控制器和线程

时间:2015-06-29 14:46:17

标签: java multithreading javafx fxml

所以,我正在编写一个大学作业,我陷入了一个必须为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在同一个线程上运行一样,只是想知道发生了什么并修复了它。

1 个答案:

答案 0 :(得分:0)

错误在于startThread()方法,对线程的调用应该是t.start(),但我写了t.run()。是的,我是那么愚蠢,感谢@James_D在评论中的帮助。