【问题标题】:FXML controller and ThreadsFXML 控制器和线程
【发布时间】: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


【解决方案1】:

错误在startThread()方法,线程调用应该是t.start()但我写了t.run()。是的,我就是这么笨,感谢@James_D 在 cmets 中的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2014-02-25
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多