首页 > 解决方案 > JavaFX 中的“脏节点”是什么?

问题描述

在我的程序中,我使用了Imageview类,将其添加到列表中,最后将列表添加到Pane中,从中列表不会更改。当程序运行时,我需要通过调用setLayoutX()setLayoutY()来改变加载图像的位置,这个过程继续进行。结果是程序出现了一些问题。首先是抛出ArrayIndexOutBoundsExceptionNullPointerException等异常. 此外,一些图像不会改变它们的位置。在检查异常时,我发现这应该与这些节点被归类为“脏节点”的事实有关。所以我想知道为什么他们被这样分类。

标签: javafx

解决方案


我相信您忘记了将您的 UI 代码放入 JavaFX 应用程序线程中。我建议您将 UI 代码放入Platform.runLater(() -> { /* your JavaFX code. */ }其中或使用任务来分隔 JavaFX 应用程序线程中必须存在或不存在的内容。

如果这对您不起作用,则问题可能是开发人员在对 impl_updatePeer 方法和 Region 类的评论中报告的 JavaFX 错误:

// TODO I think we have a bug, where if you create a Region with an Image that hasn't
// been loaded, we have no listeners on that image so as to cause a pulse & repaint
// to happen once the image is loaded. We just assume the image has been loaded
// (since when the image is created using new Image(url) or CSS it happens eagerly).

推荐阅读