从我的 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();
}
}
});
所以我有一个 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();
}
}
});