0

自 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 已被释放,所以我得到了一个异常。

我确定我错过了一个关键步骤...

谢谢

克里斯

4

2 回答 2

2

问题是您的方法中的while循环一直等到实际处置显示,因此这种方法只能在处置显示完成。runrun

我不是 SWT 专家,但请尝试将while循环移动到您的main方法中,或者将调用移动addMessage到您的run方法中。无论您采用哪种方式,您都必须在等待处理框架之前添加消息。

于 2013-02-09T16:06:37.883 回答
0

正如回复所指出的,我发布的原始示例中的问题是添加消息的代码从未被执行。所以我分离了一个单独的线程并从那里调用消息。我仍在努力,当我有时间让它正常工作时会发布更新。

于 2013-03-07T11:17:17.320 回答