对Platform.runLater

时间:2019-07-05 15:20:36

标签: multithreading user-interface exception javafx task

在JavaFX应用程序中,我有一个带有大约十二个选项卡的TabPane。根据ListView中用户元素的选择,从数据库中提取此选定元素的完整数据集,每个选项卡将显示某种类型的信息。通常,每个选项卡的信息类型由字符串,整数等组成,但几个选项卡还显示了不同图表中数字数据随时间的发展。为了获得性能,我为每个选项卡创建了一个专用的任务/线程。这产生了我所期望的数十个“不在FX应用程序线程异常上”。由于updateProgress不足以更新每个选项卡的UI,因此我开始封装用于更新选项卡UI的代码,并使用Platform.runLater引发异常。一旦所有UI代码都包装好,一切看起来就很好了,而令人高兴的是,每个Platform.runLater都只覆盖了几行代码。坚持在Platform.runLater中仅运行短任务的概念的权利。

如果我使用相同的测试数据运行该应用程序,则该应用程序可以在75%的情况下重复使用。但是,时不时地,在所有这些先前工作的代码都可以正常运行,并抛出“不在FX应用程序线程上”异常。在检查引起原因的源代码时,从一开始就应该将此代码包装在Platform.runLater中是正确的。

我的问题是:为什么代码使用相同的测试数据有时会引发异常,而有时却不会引发异常?我希望总是会抛出异常。感觉有点不可预测。

0 个答案:

没有答案