JavaFX窗口在内部细化期间没有响应
我正在使用javaFX和FXML文件 单击按钮,系统将调用一个函数到FxmlController.java中,这需要一些时间来详细说明结果 在精化过程中,GUI似乎一直冻结,直到获得结果为止。 我知道对于GUI,我应该使用threding,但我不知道如何使用。 但是,这是我的FXMLController.java的一段代码,该代码位于onClick按钮上:JavaFX窗口在内部细化期间没有响应,java,user-interface,javafx,Java,User Interface,Javafx,我正在使用javaFX和FXML文件 单击按钮,系统将调用一个函数到FxmlController.java中,这需要一些时间来详细说明结果 在精化过程中,GUI似乎一直冻结,直到获得结果为止。 我知道对于GUI,我应该使用threding,但我不知道如何使用。 但是,这是我的FXMLController.java的一段代码,该代码位于onClick按钮上: private void printOut() { List<String> listString = null;
private void printOut() {
List<String> listString = null;
Hyperlink hyperLink = new Hyperlink("test");
VBox vBox = Main.getVbox();
vBox.getChildren().clear();
listString = readAllDoc(); //this is the function that needs time to run
vBox.getChildren().add(hyperLink);
}
如何在后台运行函数“readAllDoc”而不冻结GUI?谢谢解决了
我已经编写了一个新的类扩展任务:
public class extenderTask extends Task {
private List<String> listString;
@Override
protected List<String> call() throws Exception {
this.list = functThatTakeLotOfTime();
return this.listString;
}
}
公共类扩展任务扩展任务{
私有列表列表字符串;
@凌驾
受保护的列表调用()引发异常{
this.list=functThatTakeLotOfTime();
返回此.listString;
}
}
在控制器中:
extenderTask task = new extenderTask();
new Thread(task).start();
task.setOnSucceeded(e -> {
setListYourVariable((List<String>) task.getValue()); ...
...(all other action)...
}
extenderTask task=newextendertask();
新线程(任务).start();
task.setonsucceed(e->{
setListYourVariable((列表)task.getValue())。。。
…(所有其他行动)。。。
}
很简单!!:-)当然,在javafx标记中搜索多线程;)在fx中,您将启动一个配置了自定义任务的线程,该任务执行其工作,并在准备就绪时向fx应用程序线程报告。
public class extenderTask extends Task {
private List<String> listString;
@Override
protected List<String> call() throws Exception {
this.list = functThatTakeLotOfTime();
return this.listString;
}
}
extenderTask task = new extenderTask();
new Thread(task).start();
task.setOnSucceeded(e -> {
setListYourVariable((List<String>) task.getValue()); ...
...(all other action)...
}