自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已被释放,因此我得到了一个异常。
我确信我错过了一个关键的步骤...
谢谢
克里斯
发布于 2013-02-09 16:06:38
问题是,run
方法中的while
循环会一直等待,直到显示器被实际释放,因此这种情况下,run
方法只能在显示器被释放之后才能完成。
我不是SWT方面的专家,但是可以尝试将while
循环移到main
方法中,或者将对addMessage
的调用移到run
方法中。无论采用哪种方式,都必须在等待帧被释放之前添加消息。
发布于 2013-03-07 11:17:17
我发布的原始示例中的问题是,添加消息的代码从未执行过,正如回复所指出的那样。因此,我分离了一个单独的线程,并从那里调用消息。我仍然在做它,当我有时间让它正常工作时,我会更新它。
https://stackoverflow.com/questions/14789366
复制