有什么办法可以从RAP中的后台线程(作业)获取当前的Display对象

时间:2015-02-10 07:04:26

标签: eclipse-rcp eclipse-rap

我们需要从作业内部获取RAP 2.3中的当前显示对象以更新UI。建议的方法是什么?

1 个答案:

答案 0 :(得分:1)

Threads in RAP文章详细说明了线程和会话如何在RAP中相互关联。

要从作业访问显示,作业需要知道它分配给哪个显示。因此,您需要将Displya传递给Job。 如果从UI线程调度作业,则典型代码可能如下所示:

  static class DisplayJob extends Job {
    private final Display display;

    private DisplayJob( Display display ) {
      super( "Job with UI Access" );
      this.display = display;
    }

    @Override
    protected IStatus run( IProgressMonitor monitor ) {
      display.asyncExec( new Runnable() {
        @Override
        public void run() {
        }
      } );
      return Status.OK_STATUS;
    }
  }


  Button button = new Button( ...
  button.addListener( SWT.Selection, new Listener() {
    @Override
    public void handleEvent( Event event ) {
      new DisplayJob( event.display ).schedule();;
    }
} );

请勿忘记在使用run()的{​​{1}}方法访问小部件之前是否处置小部件,或使用helper therefore

请注意,线程/会话关系并非特定于RAP,但适用于所有具有会话概念的多用户环境。