我自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()方法,当然,Shell会被释放,所以我得到了一个例外。
我确定我错过了一个关键步骤......
谢谢
克里斯
答案 0 :(得分:2)
问题是while
方法中的run
循环等待直到显示实际处理,所以这样{{ 1}}方法只能在显示处理后完成。
我不是SWT的专家,但请尝试将run
循环移至while
方法,或将呼叫移至main
进入addMessage
} 方法。无论您采用何种方式,都必须在之前添加消息,等待处理帧。
答案 1 :(得分:0)
我发布的原始示例中的问题是,回复中指出,添加消息的代码永远不会被执行。所以我分离出一个单独的线程并从那里调用消息。我还在努力,当我有时间让它全部正常工作时,我会发布刷新。