如何从JTabbedPane完全部署选项卡式窗格组件

时间:2013-09-22 07:50:28

标签: java swing garbage-collection jtabbedpane swingx

我在JTabbedPane中添加了一些标签。每个选项卡都包含一个JPanel。我现在通过调用JTabbedPane.remove([tab index])删除选项卡。这将删除选项卡,一切都很好,除了当我分析应用程序时,添加到JTabbedPane的JPanel不会被“关闭”并且引用仍然存在于堆中。在添加选项卡并关闭它的几百个操作之后,应用程序就会失去记忆。

我使用Eclipse MAT分析了堆转储,然后我点击了关闭选项卡后不应该存在的JPanel的立即统治者。立即支配者作为JTabbedPane回来了。

然后我写了一个SSCCE来重现这个问题,发现我无法重现这个问题。当我关闭标签时,JPanel会被关闭。有什么我想念的东西。为什么即使在某些情况下关闭选项卡后,JTabbedPane仍会继续引用JPanel?

更新

我更详细地看了一下MAT直方图,并发现了一些奇怪的东西。

这是选项卡打开时堆转储的快照。以下是类的正确层次结构。 HomeFrame包含一个JTabbedPane,其中包含一个包含ShareholderDtlsPanel的MasterDataDisplayPanel。另请注意对象ShareholderDtlsPanel的哈希码 - ..a20。

enter image description here

这是显示关闭标签后的状态的图像。 ShareholderDtlsPanel的哈希码是不同的..b340,它与一个完全不相关的PropertyChangeListener相关联。 enter image description here

有人可以帮我理解这里发生了什么吗?这可能是一个swingx JXTaskPaneContainer错误吗?

0 个答案:

没有答案