2013-01-08 68 views
-3

類視圖是用於用戶界面的,它包含一個大的白色樣式文本。Java類與另一類交互

public class View extends ViewPart{ 
    public static StyledText txtArea; 

    public void createPartControl(Composite parent){ 
    //... 

    txtArea = new StyledText(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL); 
    txtArea.addText("My first line !"); 

    new Server("This is my new second line !").start(); 
    } 

    public static void addText(String str){ 
     txtArea.append(str); 
    } 
} 

class Server extends Thread{ 
    private String str; 

    Server(String str){ 
     this.str = str; 
    } 

    @Override 
    public void run(){ 
     View.addText(str); 
    } 
} 

類服務器無法調用View.addText()。

如果我對txtArea對象進行引用,它就會工作,但我必須調用addText()方法。

編輯:

異常在線程 「螺紋3」 org.eclipse.swt.SWTException:無效線程訪問 在org.eclipse.swt.SWT.error(SWT.java:4361)

在org.eclipse.swt.SWT.error(SWT.java:4276)

在org.eclipse.swt.SWT.error(SWT.java:4247)

在org.eclipse。 swt.widgets.Widget.error(Widget.java:468)

在org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:359)

在org.eclipse.swt.custom.StyledText.setText(StyledText.java:9885)

在com.project.udp.views.View.log(View.java:255)

在com.project.udp.views.Server.run(View.java:294)

+0

也許你想使用View.txtArea.addText(STR) – Jack

+0

你應該調用線程啓動( )方法來運行。 – Jason

+0

你是什麼意思,「不能調用addText()?」 –

回答

0

的問題是你的「服務器類」代碼不在SWT顯示線程中,因此告訴小部件更新是無效的線程訪問。

你或許應該這樣做:

public static void addText(final String str){ 
    txtArea.getDisplay().asyncExec (new Runnable() { 
    public void run() { 
     if (!txtArea.isDisposed()) 
      txtArea.append(str); 
    } 
    }); 
} 

,使追加正確的線程上執行。

有關SWT和線程的詳細信息,我將把你的eclipse指南:

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fswt_threading.htm