自1996年以來,我寫了很多java代碼,但從未嘗試過SWT。雖然我會選擇一些非常簡單的開始,但是我很早就陷入了困境,即使在我面前有幾本SWT/Jface/RCP書籍,這些書籍並不能幫助我解決問題。Java SWT更新文本控制
我試圖讓一個命令行應用程序在SWT窗口中運行。它不需要來自用戶的任何輸入,它只需要顯示sysout。該應用程序很少會生成超過30行的sysout。
public class TestGui implements Runnable {
private Display display;
private Shell shell;
private Text text;
public void run() {
display = new Display();
shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setText("SWT Test");
shell.setSize(new Point(800, 400));
shell.setLayout(new FillLayout());
text = new Text(shell, SWT.MULTI | SWT.V_SCROLL | SWT.READ_ONLY);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
void addMessage(String s) {
text.append(s);
text.append("\n");
}
void close() {
display.dispose();
}
public static void main(String[] args) {
TestGui pr = new TestGui();
pr.run();
pr.addMessage("add some text");
pr.close();
}
}
我運行這個,我看到窗口的光標閃爍,但沒有別的出現在它。我似乎無法調用addMessage()方法直到我關閉該窗口,當然這時Shell被釋放,所以我得到一個異常。
我敢肯定,我已經錯過了關鍵的一步......
感謝
克里斯
+1絕對正確。這個構造被稱爲事件循環。 [這裏](http://www.vogella.com/articles/SWT/article.html#swt_eventloop)是一個關於如何編寫SWT應用程序的非常好的教程。 – Baz 2013-02-09 19:34:37
其實我需要做的是把實際添加消息的代碼放到一個單獨的線程中。 – casgage 2013-03-07 11:14:33