2014-11-24 42 views
0

AYT ..我有一點擔憂在這裏,我的問題是是Platform.runlater()又回到了UI線程還是有什麼替代品的唯一途徑...的Java FX UI上運行的替代品

- 適用例 -

new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // i do something slick here 

      Platform.runLater(new Runnable() { // is this the only way?? 

          @Override 
          public void run() { 
           // TODO Auto-generated method stub 
           TextField txt =new TextField(" internal server error -Re-try"); 
           root.getChildren().add(txt); 
          } 
         }); 

     } 
    }).start();; 

我想知道是否有提前其他means..thanks ...

+0

爲什麼你需要另一種做同樣的事情? – 2014-11-25 01:41:51

+1

uhmm多功能性或多功能性。但總的來說,我只是好奇,這是所有@James_D – Elltz 2014-11-25 07:02:55

回答

1

據我所知,沒有其他辦法。但是你可以通過有約束力做一些有限的東西,以有效地改變從另一個線程的UI,而不調用PlatForm.runLater() 例子:

Task task = new Task<Void>() { 
    @Override public Void run() { 
     for (int i=0; i<100; i++) { 
      updateProgress(i, 100); 
     } 
     return null; 
    } 
}; 

,然後在圖形用戶界面有一個進度條說:

ProgressBar bar = new ProgressBar(); 
bar.progressProperty().bind(task.progressProperty()); 
new Thread(task).start(); 

bar.progressProperty().bind(task.progressProperty()); 
+2

我認爲updateProgress的內部實現,只是調用Platform.runLater,以確保進度更新發生在JavaFX線程上,以便將UI元素綁定到進度屬性不會導致線程問題。所以你的第一條語句是正確的,即Platform.runLater是在JavaFX應用程序線程上運行的主要機制,而其他機制只是委託給它。很好的答案。 – jewelsea 2014-11-25 21:13:23