从我的 Swing 线程访问我的 SWT 线程的对象

Access to an object of my SWT thread from my Swing thread

所以我有一个 SWT 线程,一个由简单视图 myView 组成的 eclipse 插件,其中嵌入了一个 JPanel myJPanel 和一个 JTree myJTree。在 Swing 线程上有一个侦听器,当我的 JTree 上的选择发生变化时,它会将 JPanel 刷新到 Swing 线程中。

我的myView的简化代码版本:

 public class myView extends ViewPart {
  public java.awt.Frame myFrame;

     @Override
      public void createPartControl(Composite parent) { 
        Composite myComposite = new Composite(parent, SWT.EMBEDDED);
        myFrame = SWT_AWT.new_Frame(myComposite); 
        myFrame.add(myJPanel);
        myFrame.repaint();
        myFrame.revalidate();

        //same kind of code for Jtree -> myJTreeFrame 
    }

我想做的是从Swing线程刷新myFrame,当myJTree的监听器必须刷新myJPanel

我考虑过这个:

public void valueChanged(TreeSelectionEvent e) {
// some code that refresh myJPanel       

Display.getDefault().asyncExec(
    new Runnable() {
      public void run() {
          try { 
            myView view = (viewMap4j)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView( "pluginProject.myView");
          } catch (PartInitException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
          view.myFrame.repaint();
          view.myFrame.revalidate(); 
      }
    });     
}

但是我在库中遇到了这个错误:不能抛出 PartInitException 类型的异常;异常类型必须是 Throwable

的子类

我的问题是:如何在 Swing 线程中从我的 SWT 线程(此处 myView)访问对象? 以及让它在这个特定示例中起作用的任何想法?

这成功了,它让我可以访问 myView,在那里我可以找到 myFrame 从 JTree 侦听器刷新它:

  PlatformUI.getWorkbench().getDisplay().asyncExec(
            new Runnable() {
              public void run() {
                try {
                  myView view =null;
                  view = (myView)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("pluginProject.myView");
                  view.reloadMyFrame();
                } catch (CoreException e) {
                  e.printStackTrace();
                } 
              }
            });