0

我是新来的,我是 Java 编程的新手,但我必须注册只是为了问你这个问题,因为它困扰了我好几天。无论如何,我正在编写 TCP Client。我做了两个线程:一个用于从 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

4

1 回答 1

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
      }
  });

那它

于 2013-06-22T11:15:35.927 回答