2011-06-09 78 views
1

我的Job类中的run方法会执行一些操作(细节无关)并输出2个双精度数组。Eclipse插件:如何在作业完成后更新视图

我想显示这些数组在一个结果视图,我已创建一个表和2列,每个阵列一个。

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

即使你无法帮助我解答,如果有人能指向某个方向,我会很高兴,因为我不知道。我能想到的唯一事情就是事件处理,但我也不太了解这一点。

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

      //display in results view? 
    } 
} 

基于苏拉杰德兰的答案,这是我用来引用视图的静态方法)的代码,

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

在您的视图类有一个静态方法类似的getInstance(这将返回参考给你查看对象。一旦你有了对象,你可以在其中设置数组。

+0

所以,你的意思是说,只是说回来这个;? 因为我不能从静态方法引用非静态的任何东西 – nbz 2011-06-09 12:36:25

+0

Ok我创建了一个静态方法,它将更新视图而不是引用视图,但这只会导致无效的线程访问异常 – nbz 2011-06-09 15:52:09

+0

实际上你必须做的它在UI线程... http://www.eclipse.org/swt/faq.php#uithread – 2011-06-09 18:51:46

3

使用observer pattern(见example):

  1. 让你的浏览器观察
  2. 使您的工作实施可观察
  3. 注册在createPartControl()您的视图可观察到的(或 构造函数)和唐” t忘记注销dispose()
  4. 工作完成时通知观察者。
+0

这听起来很干净,我会尽快更新。我已经接受了这个答案,因为它为我工作,我没有时间去尝试。但我一定会尽快添加反馈。 – nbz 2011-06-20 15:44:36