我在JTabbedPane中添加了一些标签。每个选项卡都包含一个JPanel。我现在通过调用JTabbedPane.remove([tab index])删除选项卡。这将删除选项卡,一切都很好,除了当我分析应用程序时,添加到JTabbedPane的JPanel不会被“关闭”并且引用仍然存在于堆中。在添加选项卡并关闭它的几百个操作之后,应用程序就会失去记忆。
我使用Eclipse MAT分析了堆转储,然后我点击了关闭选项卡后不应该存在的JPanel的立即统治者。立即支配者作为JTabbedPane回来了。
然后我写了一个SSCCE来重现这个问题,发现我无法重现这个问题。当我关闭标签时,JPanel会被关闭。有什么我想念的东西。为什么即使在某些情况下关闭选项卡后,JTabbedPane仍会继续引用JPanel?
更新
我更详细地看了一下MAT直方图,并发现了一些奇怪的东西。
这是选项卡打开时堆转储的快照。以下是类的正确层次结构。 HomeFrame包含一个JTabbedPane,其中包含一个包含ShareholderDtlsPanel的MasterDataDisplayPanel。另请注意对象ShareholderDtlsPanel的哈希码 - ..a20。
这是显示关闭标签后的状态的图像。 ShareholderDtlsPanel的哈希码是不同的..b340,它与一个完全不相关的PropertyChangeListener相关联。
有人可以帮我理解这里发生了什么吗?这可能是一个swingx JXTaskPaneContainer错误吗?