【问题标题】:Eclipse RCP, RAP, how to populate tree from another view on plugin loadedEclipse RCP,RAP,如何从加载插件的另一个视图填充树
【发布时间】:2023-04-03 19:12:01
【问题描述】:

我想制作一个动态应用程序,并且我想在加载另一个插件时在Tree 中添加TreeItem

例如:

  1. 我有插件:com.project.startup,这个插件有一个View,里面有一个Tree。这个
  2. 我有插件:com.project.populator。我想在com.project.populator 开始时从com.project.startup 填充Tree

我知道如何添加项目,但我不知道何时何地必须编写代码。

到目前为止,我使用org.eclipse.ui.IStartup 执行此操作,但出现此错误:

!MESSAGE Unable to execute early startup code for an extension
!STACK 0
java.lang.NullPointerException
    at ro.project.populator.TreePopulator.earlyStartup(TreePopulator.java:18)

我的代码如下所示:

public class TreePopulator implements IStartup
{

    @Override
    public void earlyStartup()
    {
        ViewMenuOffers viewMenuOffers = (ViewMenuOffers) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ViewMenuOffers.ID);
        TreeViewer treeViewer = viewMenuOffers.getTreeViewer();
        Tree tree = treeViewer.getTree();
        TreeItem trtmItem = new TreeItem(tree, SWT.NONE);
        trtmItem.setText("Item 1");
    }
}

我认为 TreeViewer 未初始化.. 但它位于 ViewMenuOfferscreatePartControl 中。

我怎样才能做到这一点?如何从另一个插件 onStartup 向 View 添加内容?

【问题讨论】:

  • 您正在注册一个早期启动插件 - 无法保证您的 earlyStartup() 方法会在工作台打开或有活动页面时被调用。您可以安排一个新的 Job - JobManager 将在工作台打开后立即启动,您可以在那里进行工作,这应该保证 UI 在您被调用时正在运行。
  • 我正在做同样的事情,但使用了job,现在我收到了这个错误:An internal error occurred during: "Visits: Populate menu". No context available outside of the request service lifecycle.
  • 查看 RAP 常见问题 -> wiki.eclipse.org/RAP/…
  • 你能举个例子吗?我找不到任何...
  • @Tom Seidel 即使使用该解决方案也无法正常工作

标签: java eclipse-plugin eclipse-rcp eclipse-rap


【解决方案1】:

我找到了答案。可以这样做:

public class TreePopulator implements IStartup
{

    @Override
    public void earlyStartup()
    {
        PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {

            @Override
            public void run()
            {
                ViewMenuOffers viewMenuOffers = (ViewMenuOffers) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ViewMenuOffers.ID);
                TreeViewer treeViewer = viewMenuOffers.getTreeViewer();
                Tree tree = treeViewer.getTree();

                TreeItem trtmS = new TreeItem(tree, SWT.NONE);
                trtmS.setText("Test");

            }

        });

    }

}

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    相关资源
    最近更新 更多