【问题标题】:My Plugin view when called from other plugin throws a NPE从其他插件调用时,我的插件视图会引发 NPE
【发布时间】:2015-01-20 16:08:24
【问题描述】:

我创建了一个插件视图(源)并尝试从其他插件(目标)更新它。

我已经完成了以下操作,但仍然获得了 NPE,请帮助:

  1. 导出所有包,包括(源)插件中的视图类

  2. 包括对(目标)插件的包可见性

  3. 将(源)插件添加为依赖项选项卡中的必需插件

(源插件)

<plugin>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="com.he.reportLayer.views.BrowserView"
            id="com.he.reportLayer.views.BrowserView"
            name="Live Reporter!">
      </view>
   </extension>
</plugin>  

(目标插件)

 BrowserView view=null;
            try {
                view =(BrowserView)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("com.he.reportLayer.views.BrowserView");
            } catch (PartInitException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

【问题讨论】:

  • getWorkbench、getActiveWorkbenchWindow、getActivePage 和 showView 都可以返回 null - 那么它是哪一个呢?做一些调试!
  • getActiveWorkbenchWindow 返回 null
  • 所以您在没有打开窗口的情况下运行此代码。这段代码是如何运行的?
  • 代码正在从其他插件调用,工作台窗口打开,如屏幕截图所示。运行方式 > 运行脚本 > ILaunchShortcut 调用其他插件中的某个类 A 调用视图来更新它。
  • 根据链接stackoverflow.com/questions/1265174/…,我将视图更新包装在一个可运行线程中,但视图最后更新与执行不同步。

标签: eclipse eclipse-plugin eclipse-rcp jface


【解决方案1】:

几个改动解决了这个问题:

  1. 当您从非 UI 线程更新视图时,请使用:

Display.getDefault().asyncExec(new Runnable() { 公共无效运行(){

            IWorkbenchWindow iw =
                PlatformUI.getWorkbench().getActiveWorkbenchWindow();
            try {
                view =
                        (BrowserView) iw.getActivePage().showView(
                            "com.he.reportLayer.views.BrowserView");
                view.getBrowserInstance().setUrl(url);
            } catch (PartInitException e) {
                e.printStackTrace();
            }
           // System.out.println("View >>" + view);
        }
    });
  1. 使用 eclipse 作业 API https://eclipse.org/articles/Article-Concurrency/jobs-api.html 不阻塞 UI

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2011-09-16
    • 2020-07-30
    相关资源
    最近更新 更多