【发布时间】:2015-04-24 07:26:20
【问题描述】:
我正在使用 Netbeans Nodes API 在我的桌面应用程序中创建一个资源管理器(基于 Netbeans RCP)。这些节点有一些层次结构,当删除其中一个时,我也会删除它的所有子节点。从这个资源管理器中删除节点时,我遇到了一些非常奇怪的行为。
问题:我将节点存储在 Cache(基本上是一个 HashMap)中,以便轻松访问它们。当我在同一个会话中创建一个节点并删除它时,它会从资源管理器中消失(这就是我想要的)。但是,当我在不同会话中删除节点时(我创建一个节点,关闭应用程序并再次重新启动它,我现在想删除它),该节点保留在资源管理器中(至少在视觉上,如果我再次尝试删除它,应用程序说它不存在)。我花了几个小时试图找出为什么会发生这种情况,但我一无所知。
所有节点都是AbstractNodes:
public class ProductNode extends AbstractNode {
...
}
删除节点:
public static void deleteProduct(Product product) {
String pID = product.getID();
// get node from cache
// THIS ALWAYS RETURNS THE CORRECT NODE, never null so the problem is not here
ProductNode childNode = NDNodesCache.getProductNode(pID);
// get parent node from cache and remove child node
// ALSO RETURNS CORRECT NODE
TopProductNode parent = NDNodesCache.getTopProductNode();
parent.getChildren().remove(new Node[]{childNode});
// remove the node from node cache
NDNodesCache.removeProductNode(pID);
}
调用此函数后,该节点无法再次删除,因为应用程序声称它不存在但视觉上停留在那里(甚至提供与该节点关联的上下文菜单)。
首先我认为缓存有问题,但它总是返回所需的节点,无论何时(即使在重新启动应用程序后,因为在资源管理器初始化期间添加了节点)。你知道如何解决这个问题吗?
我也尝试调用childNode.destroy(); 这会改变节点的外观,但不会完全删除它。
【问题讨论】:
标签: java nodes netbeans-platform