有时,某些具有悬停样式的 UI 元素根本不会呈现,并且会在其位置保留一个白框。 这仅在我调整应用程序窗口大小后发生,并且 UI 元素完全超出应用程序窗口的原始边界时。 从悬停位置移除鼠标指针后,下图中显示的按钮也不会立即正确渲染,因此每当需要重新绘制按钮时,都可能发生此问题。
"设备日志记录"按钮在调整窗口大小之前被鼠标悬停。
调整窗口大小后。"设备日志记录"和"杂项测试"按钮都 100% 超出窗口的原始边界。但是,"云服务器迁移"按钮仍正确呈现。
我已经设置了样式,但删除它们不起作用。 仅当发生其他处理(例如运行固件更新功能)时,似乎才会出现此问题。 这告诉我可能会占用UI时间,但我本来希望这会影响每个UI元素,而不仅仅是某些元素。
另一个注意事项是,UI是从Swing转换为JavaFX的,因此所有线程都不包括使用Task或Platform.runlater()。 此后,我确保所有 UI 更新都使用 Platform.runlater(),但我尚未将所有不更新 UI 的原始线程转换为任务。 下面我将包括运行固件更新的框架。
编辑:能够在不启动固件更新的情况下重现该问题,因此我认为这与处理阻塞UI渲染没有任何关系。 仅在使用某些 UI 后出现问题。 因此,我删除了上面发布的代码。 这让我相信它更多地与 UI 的实际布局有关。
我已经解决了这个问题。我使用 ListView 来保存对象,并使用单元格工厂来呈现每个单元格,以使用自定义 UI 呈现每个单元格。使用项目填充列表时,将生成其他线程以检索单元格中每个对象的信息。与对象关联的变量绑定到自定义 UI 中的视图属性。我没有使用 Platform.runlater() 来使用新信息更新这些属性。将集更新为稍后运行后,该问题似乎已修复。