Доступ к объекту моей нити SWT из моей нити Swing

Итак, у меня есть SWT-поток, плагин Eclipse, который состоит из простого представления myView с 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 
    }

Что я хочу сделать, это обновить myFrame из потока Swing, когда слушатель 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

Мой вопрос: как получить доступ к объекту из моей темы SWT (здесь myView а) в качели темы? и какие-нибудь идеи, чтобы заставить это работать в этом конкретном примере?

1 ответ

Решение

Это сделало свое дело, это дало мне доступ к 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();
                } 
              }
            });
Другие вопросы по тегам