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



所以我有一个SWT线程,一个由一个简单的视图myView组成的eclipse插件,其中嵌入了一个JPanelmyJPanel和一个JTreemyJTree。在 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();
} 
}
});

最新更新