gpt4 book ai didi

Java SWT 更新文本控件

转载 作者:行者123 更新时间:2023-12-02 07:17:17 25 4
gpt4 key购买 nike

自 1996 年以来,我编写了很多 Java 代码,但从未尝试过 SWT。我虽然会选择一些非常简单的东西来开始,但我很早就陷入了困境,即使我面前的几本 SWT/Jface/RCP 书籍也不能帮助我解决我的问题。

我正在尝试使命令行应用程序在 SWT 窗口中运行。它不需要用户的任何类型的输入,它只需要显示系统输出。应用程序很少生成超过 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 已被释放,所以我得到了一个异常。

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

谢谢

克里斯

最佳答案

问题是 run 方法中的 while 循环等待,直到显示实际处理,这样,run 方法只能在显示被处理后完成。

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

关于Java SWT 更新文本控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com