javafx ui界面使用主線程,正常狀況下主線程中執行的代碼邏輯時 主界面會卡住無響應全部須要一個單獨的線程來處理這部分業務java
javafx提供了task類 如下是在一個按鈕點擊時間中開啓task線程來完成任務 而此時主線程的ui不會被影響ide
Task<String> task = new Task<String>() { @Override protected String call() throws Exception { return deviceState(); } @Override protected void running() { } @Override protected void succeeded() { taskSuccess(getValue()); } @Override protected void cancelled() { Alert _alert = new Alert(Alert.AlertType.INFORMATION); _alert.setTitle("cancelled"); _alert.show(); } @Override protected void failed() { taskFailed(getException()); } }; new Thread(task).start();
javafx中只有主線程來能夠對ui界面中的元素作操做 子線程想改變ui中的元素時 javafx提供了方法 ui
Platform.runLater(new Runnable() { @Override public void run() { //更新JavaFX的主線程的代碼放在此處 // p.cancelProgressBar(); lab1.setText("正在檢查文件 "+obj.getName()+i); } });