[英]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.