2016-02-29 18 views
0

我需要建立一些东西,我不知道如何。我希望有人能引导我走向正确的道路,或告诉我如何去做。多线程与一台机器和javafx执行困难

我正在使用一台机器,并且这台机器产生一些输出。该输出通过另一个程序读取。我正在通过一个流程构建器在任务中创建的流程来读取此输出。此输出需要处理,屏幕上的多个值必须更新。它们都包含不同的消息,但消息取决于进程的输出。 (我需要读取秤的输出,它给我产品的重量和当前的时间,产品的重量,当前时间和价格需要从中减去/计算,并且需要在屏幕上显示)。

我不能使用观察者模式,因为那么屏幕会从另一个线程更新,这将触发一个错误。我也不能使用任务的updateMessage函数,并将标签绑定到消息属性,因为所有标签都有不同的输出。

我该做什么?你能否让我走上正轨?

+0

过程的输出在后台线程,当你有完整的输出,更新UI处于可运行传递给'Platform.runLater(...) '。你的问题实在太广泛了,不能给出更具体的答案。 –

+0

我可以提供更多的细节来提供更具体的awnser?那会不会触发另一个并发错误? –

+0

那么一些代码会很好。但是,也许我的评论足以回答这个问题。 –

回答

1

基本上可以构建这样的:

Thread machineReadThread = new Thread(() -> { 
    boolean finished = false ; 
    Process process = null ; 
    InputStream in = null ; 
    try { 
     process = new ProcessBuilder(...).start(); 
     in = process.getInputStream(); 
     while (! finished) { 
      double weight = readWeightFromStream(in); 
      Instant timestamp = readTimestampFromStream(in); 
      Platform.runLater(() -> updateUI(weight, timestamp)); 
      finished = checkFinished(); 
     } 
    } catch (Exception exc) { 
     log(exc); 
    } finally { 
     if (in != null) in.close(); 
     if (process != null) process.destroy(); 
    } 
}); 
machineReadThread.setDaemon(true); 
machineReadThread.start();