我需要从javafx中的句柄函数更新一些组件(标签,ProgressBar,按钮)。
该对话框是一个模态对话框,它用于按顺序执行某些操作。
@FXML public void updateHandle(ActionEvent action){
buttonSend.setDisable(true);
/* Operation 1 */
progressBar.setProgress(0.05);
label.setText("Init..");
myInitFunction();
myVar = new var(); //global
/* Op2 */
progressBar.setProgress(0.10);
label.setText("Check connection..");
myConnFunction();
// ....
// ....
}
问题是我的所有功能都已正确处理,但GUI上的元素没有改变。
修改
我尝试使用Platform.runlater,但它似乎不起作用......
void updateLabelLater(final Label label, final String text) {
Platform.runLater(new Runnable() {
@Override public void run() {
label.setGraphic(null);
label.setText(text);
}
});
}
void updateProgressBar(final ProgressBar progressBar, final double val){
Platform.runLater(new Runnable() {
@Override public void run() {
progressBar.setProgress(val);
}
});
}
答案 0 :(得分:1)
updateHandle是否在Event Thread上运行?我没有因为工具问题而烦恼FXML所以这不是一个很好的答案。 (但希望它有所帮助!)
//Pseudo Code
public doLongRuningOperation(final Object ... objects){
final Thread longRunning = new Thread(){
public void run(){
update("this");
sleep(1000); //Pause/do something etc...
update("should");
sleep(1000);
update("update");
System.err.println("completed");
}
};
longRunning.start(); //Start this process
}
//Rejoin the UI Thread and update it...
public void update(final String text){
//reference to label 'lbl'
Platform.runLater(new Runnable(){
lbl.setText(text);
});
}