JavaFX偶发渲染问题 - 消失的按钮/控件

时间:2018-01-26 08:15:56

标签: java javafx rendering

我将Java / JavaFX应用程序部署为Windows和Mac的本机安装。捆绑的运行时当前是8.121。您可以在此处找到安装程序和Java代码:George download

在过去的15个月里,我每周都在教室里使用这个应用程序(有20个孩子),从一开始我就看到了以下问题:

按钮不时消失。也就是说,它们只是呈现为白色矩形,使它们几乎不可见。背景和标签/文本都消失了。

这主要发生在鼠标悬停上,但后来无法自行纠正。 按钮仍在那里,可点击。

它只是偶尔发生,但似乎在某些机器上比其他机器更多。 Windows 10现在,但以前在小型Windows 7机器上也是如此。

我认为我自己无法重现它,也从未在Mac上看过它。

现在有时也会使用其他小部件/控件,甚至在任何用户交互之前。

这周围有一些已知问题吗? 有没有其他人描述类似的东西? 它可能与某些微小的操作系统调整有关吗?

任何想法或想法都会非常感激。

更新(2018-11-06)

刚开始使用Windows 10在VirtualBox中用Java 8测试我的应用程序,现在我自己得到了渲染错误。 HURRA!

查看-Dprism.xxx选项,我发现了这篇文章: http://werner.yellowcouch.org/log/javafx-8-command-line-options/

使用-Dprism.threadcheck=true进行测试,我得到了很多 "错误:PrismPen / FX线程共同运行:DIRTY:false"堆栈跟踪。

虽然设置-Dprism.dirtopts=false并不能解决这个问题。

但与-Dprism.order=sw一起运行。但对于可能需要进行一些要求渲染的应用程序(Turtle Geometry)来说,这不是一个好的解决方案。

将继续挖掘。

2 个答案:

答案 0 :(得分:1)

我一直有同样的问题,我尝试更新到Java 10,但问题仍然存在。然后,我在java.exe上编辑了属性,在“兼容性”选项卡上,我将“覆盖高DPI缩放行为”设置为“系统(增强)”,问题似乎已经消失(或者至少它没有再次发生)尚未)。

enter image description here

答案 1 :(得分:0)

我观察到了同一件事:手动消失后,视觉上消失了(但仍然可以使用)按钮和其他控件(标签除外),尤其是在窗口原始大小之外的区域中)

在我的情况下,-Dprism.dirtopts=false减少了问题,但没有解决(无论如何,这并不是一个令人满意的解决方案)。

此外,我观察到某些TextField控件也显示了渲染故障(看起来相同的文本被渲染了两次,但有一点偏移)。终于使我走上了正轨:

对于这些Platform.runLater(...)控件,(从另一个线程)对TextField.setText(...)的一些调用(来自另一个线程)只是一个丢失的TextField,这导致了这一情况(即使对于{ {1}},它位于完全不同的位置-也在小部件层次结构中。

我知道,这可能不是所有情况下的答案,但希望它至少可以帮助其他一些面临相同问题的人(花了我一整天的时间来找出答案)。