JavaFX GUI卡住了

时间:2013-06-22 00:23:36

标签: user-interface service javafx

我是新来的,我是Java编程的新手,但我不得不注册只是为了问你,因为它困扰了我好几天。 无论如何,我正在编写TCP客户端。我创建了两个线程:一个用于从System.in读取并发送到套接字,另一个用于从套接字读取并写入System.out。 这工作正常,但现在我需要制作一个GUI,我知道如果我想保持我的GUI交互,我需要使用任务和/或服务,但我不知道如何使我的线程作为服务。 这是代码(在终端中工作):

public static class ReadThread extends Thread
{
    BufferedReader in;
    String word;

    ReadThread(BufferedReader in)
    {
        this.in = in;
    }

    @Override
    public void run()
    {
        try {
            while((word = in.readLine()) != null)
                System.out.println(word);
        } catch (IOException ex) {
            Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

与此类似,我制作了WriteThread,但我不想让这篇文章变得凌乱...... 无论如何,当我尝试将其作为服务实现时,我不得不在“最终”中产生一些其他错误,依此类推。 如果你能帮我解决我的特殊情况,我会很感激因为我可能会阅读本网站上的所有JavaFX GUI问题哈哈 提前致谢,对不起,发帖很长! :d

1 个答案:

答案 0 :(得分:1)

这就是我实现服务的方式

public class ReadService extends Service {

    BufferedReader in;
    String word;

    @Override
    protected Task createTask() {
        return new Task() {
            @Override
            protected Object call() throws Exception {
                try {
                    while((word = in.readLine()) != null)
                        System.out.println(word);
                } catch (IOException ex) {
                    Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
                }
                return null;
            }
        };
    }

    public BufferedReader getIn() {
        return in;
    }

    public void setIn(BufferedReader in) {
        this.in = in;
    }
}

您必须致电您的服务。

 ReadService readService = new ReadService();
         readService.setIn(//HEre your in);
          readService.restart();

您还可以在服务启动,取消,失败,完成时添加一些处理程序......

  readService.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
      @Override
      public void handle(WorkerStateEvent workerStateEvent) {
          // Here the finish action
      }
  });