所以我有一个 SWT 线程,一个包含一个简单视图的 eclipse 插件,其中嵌入myView
了一个 JPanelmyJPanel
和一个 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 的子类
我的问题是myView
:如何在 Swing 线程中从我的 SWT 线程(此处)访问对象?以及使它在这个特定示例中起作用的任何想法?