我想知道在对话寡妇按下红十字时究竟发生了什么。
我有一个对话框,可以将数据添加到动态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
我希望我能知道默认关闭的确切方式,这样可以保证一切正常,我的代码出了什么问题。
答案 0 :(得分:0)
最后,我找到了解决方案。似乎本机关闭按钮在隐藏对话框之前会以某种方式延迟,并让后台操作正常工作。
现在,只需将此睡眠时间放在addData()
方法的末尾,一切正常:
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
很明显,在handleAddButton()
方法中以及在结束代码之前添加此部分也是有效的。但是因为我从很多地方打电话给addData()
,我宁愿把它放在那里。