簡體   English   中英

從我的Swing線程訪問我的SWT線程的對象

[英]Access to an object of my SWT thread from my Swing thread

所以我有一個SWT線程,一個包含簡單視圖myView的eclipse插件, myJTree嵌入了一個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(); 
      }
    });     
}

但是我在librairies上遇到了這個錯誤: 不會拋出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();
                } 
              }
            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM