为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX 窗口在内部细化期间没有响应

JavaFX 窗口在内部细化期间没有响应

哆啦的时光机 2021-10-28 17:23:39
我正在将 javaFX 与 FXML 文件一起使用。单击按钮,系统将一个函数调用到 FxmlController.java 中,该函数需要一些时间来详细说明结果。在细化过程中,GUI 似乎冻结,直到获得结果。我知道对于 GUI 我应该使用线程,但我不知道如何。但是,这是调用 onClick 按钮的 FXMLController.java 的一段代码: 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);    } 此外,函数 printOut 在 fxml 文件中被调用......见下文:<Button fx:id="read" layoutX="34.0" layoutY="401.0"        mnemonicParsing="false" text="Read All" onAction="#printOut" />主要是这样的:public void start(Stage stage) throws IOException{       // Create the FXMLLoader     FXMLLoader loader = new FXMLLoader();    // Path to the FXML File    String fxmlDocPath = getClass().getResource("MyFXML.fxml").getPath();    FileInputStream fxmlStream = new FileInputStream(fxmlDocPath);    // Create the Pane and all Details    AnchorPane root = (AnchorPane) loader.load(fxmlStream);    setPrimaryRoot(root);    ScrollPane sp = (ScrollPane) root.getChildren().get(2);    VBox vb = (VBox) sp.getContent();    setScrollPane(sp);    setVbox(vb);    // Create the Scene    Scene scene = new Scene(root);    // Set the Scene to the Stage    stage.setScene(scene);    // Set the Title to the Stage    stage.setTitle("Project");    setPrimaryStage(stage);    // Display the Stage    stage.show();}如何在不冻结 GUI 的情况下在后台运行函数“readAllDoc”?谢谢
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

解决了!


我写了一个新类extenderTask:


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)...

}

很容易!!:-)


查看完整回答
反对 回复 2021-10-28
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信