gpt4 book ai didi

java - 如何在 asyncExec() 调用中更新 SWT GUI

转载 作者:行者123 更新时间:2023-11-30 03:36:40 26 4
gpt4 key购买 nike

在我的 SWT GUI 中,我想要一个按钮来启 Action 业,并在运行该作业时更新一个文本框,以显示该作业的事件日志。但是,直到 asyncExec() 调用结束后,我的文本框才会更新。在下面的示例中,我希望我的文本框每秒更新一次,但它在执行完成 10 整秒后立即获取所有更新。

有办法实现吗?

private void UpdateUI()
{
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run()
{
StringBuilder sb = new StringBuilder();
for(int i=1; i<=10; i++)
{
sb.append("Running iteration " + i + "\n");
txtLogBox.setText(sb.toString());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}});
}

最佳答案

您正在 UI 线程中 hibernate 。您需要在不同的线程中完成长时间运行的工作,并且仅使用 asyncExec 将更新发布到 UI 线程。例如:

new Thread(new Runnable() {
public void run()
{
StringBuilder sb = new StringBuilder();

for(int i=1; i<=10; i++)
{
sb.append("Running iteration " + i + "\n");
final String result = sb.toString();

Display.getDisplay().asyncExec(new Runnable() {
public void run()
{
txtLogBox.setText(result);
}
});

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();

关于java - 如何在 asyncExec() 调用中更新 SWT GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27734921/

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