单击按钮时更新GUI:JavaFX
点击按钮后第一件事就是更新GUI,然而Platform.runLater会在稍后的阶段执行,我正在寻找一段代码,该代码在点击按钮后第一件事就是更新GUI单击按钮时更新GUI:JavaFX,java,multithreading,concurrency,javafx,platform,Java,Multithreading,Concurrency,Javafx,Platform,点击按钮后第一件事就是更新GUI,然而Platform.runLater会在稍后的阶段执行,我正在寻找一段代码,该代码在点击按钮后第一件事就是更新GUI Platform.runLater(new Runnable() { @Override public void run() { //Update GUI here }
Platform.runLater(new Runnable() {
@Override
public void run() {
//Update GUI here
}
});
如果有人能提供任何输入或建议,我们将不胜感激。尽管API指定了
平台.runLater
“在将来某个未指定的时间在JavaFX应用程序线程上运行指定的Runnable”,但执行指定线程通常只需很少或根本不需要时间。相反,您可以只向按钮添加一个EventHandler来监听鼠标单击
假设控制器实现可初始化
@FXML Button button;
@Override
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
button.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
updateGUI();
}
});
}
private void updateGUI() {
// code
}
@FXML按钮;
@凌驾
公共void初始化(URL fxmlFileLocation,ResourceBundle资源){
setOnMouseClicked(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
updateGUI();
}
});
}
私有void updateGUI(){
//代码
}
为什么要使用Platform.runLater(…)
呢?为了能够在GUI线程上更新GUI,请告诉我一个更好的建议。无论如何,事件处理程序都是在GUI线程上调用的。但是当GUI更新时,已经太晚了。希望GUI作为第一件事更新什么需要几分钟?在Platform.runLater(task)
中的task
启动或完成之前几分钟?通常只需几毫秒即可启动任务
。如果task
执行时间过长(如查询远程数据库),则不应在UI线程上执行。此代码看起来很奇怪。为什么要在@FXML
带注释的方法中注册处理程序?您预期会发生一些事件,导致处理程序被注册(因此只有在该事件之后单击按钮才会触发GUI更新)?为什么要使用setOnMouseClicked(…)
而不是setOnAction(…)
作为按钮
?请参阅更新的答案。你是对的,方法不需要是@FXML;我把它改为初始化(…)
。我将其保留为setOnMouseClicked(…)
,这仅仅是因为单击按钮时指定的问题。我假设这里的按钮是指FXML按钮。