JavaFX关闭Windows

时间:2016-12-12 12:08:09

标签: java multithreading user-interface javafx dialog

我想知道在对话寡妇按下红十字时究竟发生了什么。

我有一个对话框,可以将数据添加到动态LineChart并使用新点更新图表。问题是,当我在添加作业后关闭以编程方式对话框时,UI无法正确更新。但是,如果我不以编程方式关闭它,只需按默认十字按钮,一切正常。

我的结束代码是以下行,它从未正确更新过UI:

((Button)actionEvent.getSource()).getScene().getWindow().hide();

当我使用Platform.runLater()这样做时,它有时会更新,有时不会更新!

Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    ((Button)actionEvent.getSource()).getScene().getWindow().hide();
                }
            });

顺便说一句,如果你想看看更新工作的进展情况,请点击这里:

我有一个在fxml文件中定义的对话框,它有两个用于获取x和y的文本字段以及一个添加按钮。此添加按钮有一个名为onAction的{​​{1}}方法,该方法在handleAddButton()类中定义。然后在此方法中,我从DialogController类调用addData()方法,如下所示:

LineChartController

这是public void handleAddButton(ActionEvent actionEvent) { Number x = new NumberStringConverter().fromString(timeField.getText()); Number y = new NumberStringConverter().fromString(bandWidthField.getText()); lineChartController.addData(x, y); Platform.runLater(new Runnable() { @Override public void run() { ((Button)actionEvent.getSource()).getScene().getWindow().hide(); } }); } 类中的addData()方法实现:

LineChartController

我希望我能知道默认关闭的确切方式,这样可以保证一切正常,我的代码出了什么问题。

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。似乎本机关闭按钮在隐藏对话框之前会以某种方式延迟,并让后台操作正常工作。

现在,只需将此睡眠时间放在addData()方法的末尾,一切正常:

 try {
      Thread.sleep(30);
 } catch (InterruptedException e) {
      e.printStackTrace();
 }

很明显,在handleAddButton()方法中以及在结束代码之前添加此部分也是有效的。但是因为我从很多地方打电话给addData(),我宁愿把它放在那里。