1996 年以来、私は多くの Java コードを書いてきましたが、SWT を試したことはありません。最初は本当に簡単なものを選ぶつもりでしたが、私の前にいくつかの SWT/Jface/RCP の本があり、私の問題を解決するのに役立たなかったとしても、かなり早い段階で立ち往生してしまいました。
コマンド ライン アプリケーションを 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() メソッドの呼び出しを実行できないようです。もちろん、それまでにシェルが破棄されるため、例外が発生します。
私は重要なステップを逃したと確信しています...
ありがとう
クリス