Eclipse 插件:Job 完成后如何更新视图

Posted

技术标签:

【中文标题】Eclipse 插件:Job 完成后如何更新视图【英文标题】:Eclipse plug-in: how to update a view once a Job is complete 【发布时间】:2011-06-09 12:07:50 【问题描述】:

我的 Job 类中的 run 方法做了一些事情(细节无关紧要)并输出 2 个双精度数组。

我想在我创建的结果视图中显示这些数组,其中包含一个表和 2 列,每个数组一个列。

如何在 run 方法结束时(在 Job 类中)引用视图并在其中显示这些数组?

即使你不能帮助我回答,如果有人能指出我的方向,我会很高兴,因为我不知道。我唯一能想到的就是事件处理,但我对此也不太了解。

class RunnerJob extends Job 
     protected IStatus run(IProgressMonitor monitor) 
          //does some stuff
          double[] col1 = someStuff1();
          double[] col2 = someStuff2();

          //display in results view?
  

根据 Suraj Chandran 的回答,这是我用来引用视图的静态方法的代码,

display.syncExec(
    new Runnable() 
       public void run()
           try  
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(ResultsView.ID);
            catch (PartInitException e) 
                e.printStackTrace();
             
                 ResultsView.update(<object with values>);
             
     );

【问题讨论】:

【参考方案1】:

使用observer pattern(见example):

    让你的视图实现观察者 让你的 Job 实现 Observable 在createPartControl()(或在 构造函数),并且不要忘记在dispose()中注销它。 作业完成后通知观察者。

【讨论】:

这听起来确实很干净,我一试用就会更新。我已经接受了这个答案,因为它对我有用,我还没有时间尝试这个。但我一定会尽快添加反馈。【参考方案2】:

在您的视图类中有一个类似于 getInstance() 的静态方法,它将返回对您的视图对象的引用。获得对象后,您可以在其中设置数组。

【讨论】:

所以你的意思是说return this;?因为我不能从静态方法中引用任何非静态的东西 好的,我创建了一个静态方法,它将更新视图而不是获取对视图的引用,但这只会导致无效的线程访问异常 实际上你必须在 UI 线程中进行...eclipse.org/swt/faq.php#uithread 是的,我明白了...我发现在视图中调用静态方法更容易,然后该方法将填充我需要的任何内容。我已经用我使用的一些代码更新了我的问题。

以上是关于Eclipse 插件:Job 完成后如何更新视图的主要内容,如果未能解决你的问题,请参考以下文章

git如何更新到指定版本,然后再更新到最新版本

Eclipse插件安装

Jenkins触发job插件_Join

更新 hadoop eclipse 插件

如何使用Eclipse插件

Eclipse中配置Spring插件