【问题标题】:JavaFX sporadic rendering issue - disappearing buttons / controlsJavaFX 零星渲染问题 - 按钮/控件消失
【发布时间】:2019-05-10 17:40:41
【问题描述】:

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

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

按钮有时会消失。也就是说,它们被简单地渲染为一个白色矩形,使它们实际上几乎不可见。背景和标签/文本都消失了。

这主要发生在鼠标悬停时,但不会自行纠正。 按钮仍然存在,并且可以点击。

它只是偶尔发生,但它似乎在某些机器上比其他机器更容易发生。现在是 Windows 10,但以前在小型 Windows 7 机器上也发生过同样的情况。

我想我自己无法重现它,而且我从未在 Mac 上见过它。

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

这方面是否存在一些已知问题? 有没有其他人描述过类似的东西? 可能与某些小的操作系统调整有关?

任何想法或想法将不胜感激。

更新 (2018-11-06)

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

查看 -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)的应用程序来说不是一个好的解决方案。

会继续挖掘。

【问题讨论】:

  • 可能是图形驱动程序问题... 使用-Dprism.order=sw 运行可以解决问题吗? (参见例如this question)。如果是这样 - 您可能想尝试安装新的或旧的驱动程序,看看是否一个比另一个更好......
  • 是的,我已经想到了。在儿童机器上进行测试有点棘手/耗时。但有可能。我将在下周尝试,并得到任何结果。 (我可能会提前准备一个 Windows 批处理脚本来轻松地进行测试。)
  • 我遇到了同样的问题。然后我注意到有一个我没有看到的异常。修复异常为我解决了这个问题(到目前为止,AFAIK。很难验证)

标签: java javafx rendering


【解决方案1】:

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

【讨论】:

  • 我会在下次看到它时测试它并返回任何结果。
【解决方案2】:

我观察到同样的事情:在我手动调整窗口大小后,按钮和其他控件(标签除外)在视觉上消失(但仍然有效),尤其是在窗口原始大小之外的区域)

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

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

结果只是缺少 Platform.runLater(...) 围绕一些对 TextField.setText(...)(来自另一个线程)的调用,正是这些 TextField 控件,这导致了这种情况(即使是 Button,它位于完全不同的地方 - 也在小部件层次结构中)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2014-10-18
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    相关资源
    最近更新 更多