java - Netbeans Nodes API - 从资源管理器中删除节点

标签 java nodes netbeans-platform

我正在使用 Netbeans Nodes API在我的桌面应用程序中创建一个资源管理器(基于 Netbeans RCP)。这些节点具有一定的层次结构,当删除其中一个节点时,我也会删除它的所有子节点。从该资源管理器中删除节点时,我遇到了一些非常奇怪的行为。

问题:我将节点存储在缓存(基本上是一个 HashMap)中,以便轻松访问它们。当我创建一个节点并在同一 session 中删除它时,它会从资源管理器中消失(这就是我想要的)。但是,当我在不同 session 中删除节点时(我创建一个节点,关闭应用程序并再次重新启动它,我现在想删除它),该节点保留在资源管理器中(至少在视觉上,如果我尝试再次删除它,应用程序会说它不在那里)。我花了几个小时试图找出为什么会发生这种情况,但我一无所知。

所有节点都是 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(); 这会更改节点的外观,但不会完全删除它。

最佳答案

如果您看一下我编写的以下代码; https://github.com/flinkgutt/netbeans-samples/blob/master/nodes/node-samples/view-beantree/src/net/flinkgutt/samples/nodes/view/beantree/CategoryNode.java 文件底部有一个名为“RemoveCategoryAction”的私有(private)类,它应该可以帮助您。

整个项目主要是展示如何使用节点执行某些操作,删除其中的节点。私有(private)类是从 beantreeview 节点上的上下文菜单调用的。

希望对你有帮助!

关于java - Netbeans Nodes API - 从资源管理器中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29841214/

相关文章:

java - 用于为映射建立索引的动态键的 ElasticSearch 映射

java - Primefaces selectOneListbox 值为 null

C链表searchNode/freeList方法(seg fault)

java - 以字符串形式获取子节点

java - 如何使用 DataObject API 获得有关 NetBeans 中文件内容更改的通知

java - 如何自定义独立netbeans应用程序的java选项?

java - 如何使用通过 VPN 工作的 selenium webdriver 访问应用程序?

c++ - 链表插入问题

java - 我不断收到以下错误消息 java.lang.IllegalStateException : Buffers have not been created

java - 扩展包在 OSGi 框架中的含义