2016-02-29 64 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();