3
我正在使用Task
做一些計算,此計算的輸出存儲爲字符串。計算完成後,輸出應顯示在TextArea
中。使用任務的onSucceeded
來設置TextArea
的文本安全嗎?如果不是,那麼最好/推薦的方法是等待任務完成,然後將輸出寫入TextArea
?從Task.onSucceeded()訪問GUI元素是否安全?
感謝您的任何提示:-)
我正在使用Task
做一些計算,此計算的輸出存儲爲字符串。計算完成後,輸出應顯示在TextArea
中。使用任務的onSucceeded
來設置TextArea
的文本安全嗎?如果不是,那麼最好/推薦的方法是等待任務完成,然後將輸出寫入TextArea
?從Task.onSucceeded()訪問GUI元素是否安全?
感謝您的任何提示:-)
是的,看到Task
javadoc報價:
因爲任務是專爲使用JavaFX GUI應用程序的使用,它可以確保每一個變化,以它的公共屬性,以及更改狀態,錯誤和事件處理函數的通知,這些都發生在主JavaFX應用程序線程中。
可以使用下面的代碼驗證自己這樣的情況:
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
System.out.println(Thread.currentThread().getName());
}
});
輸出應該是:
的JavaFX應用程序線程
啊冷靜,並沒有意識到這一點我可以檢查這個如此簡單。對於我來說,任務描述並不完全清楚,因爲「事件處理程序的更改通知」,我錯過了一個清晰的「任務事件在應用程序線程上執行」。 –
您也可以使用Platform.isFXApplicationThread()來檢查相同的事情:http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#isFxApplicationThread() –