gpt4 book ai didi

java - 进度条未及时更新

转载 作者:行者123 更新时间:2023-12-01 10:03:18 24 4
gpt4 key购买 nike

我有一个问题。在我的(基于 eclipse 4)GUI 上我有两个对象:

Button button = new Button(groupInitialize, SWT.NONE);
ProgressBar bar= new ProgressBar(group, SWT.SMOOTH);

我为该按钮设置了一个监听器,以便每当按下该按钮时都会开始详细说明。在此阐述过程中,必须更新状态栏。

// Button listener definition!
button .addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(final Event event) {
Runnable run = new Runnable() {
@Override
public void run() {
Display display = PlatformUI.getWorkbench().getDisplay();
display.asyncExec(new Runnable() {
public void run() {
myLongLastingMethod();
}
});

}
};
new Thread(run).start();
}
});

这就是我在 myLongLastingMethod() 中所做的:

private void myLongLastingMethod() {
action1();
update();

action2();
update();

action3();
update();
}

最后是更新方法(应该更新进度条):

已更新

private void update() {
if (progressBar.isDisposed()) {
return;
}
int selection = progressBar.getSelection();
progressBar.setSelection(++selection);
}

我确定我做错了什么...知道/帮助为什么它不起作用?

最佳答案

您的后台线程Runnable正在使用display.asyncExec来调用您的长时间运行的方法。 display.asyncExec 在用户界面线程中运行代码,因此当该代码运行时,UI 中不会发生任何其他事情。您应该只使用 asyncExec 运行更新 UI 的短代码。

只需在后台线程中直接调用 myLongLastingMethod 即可,无需调用 asyncExec

所以:

public void handleEvent(final Event event) {
Runnable run = new Runnable() {
@Override
public void run() {
myLongLastingMethod();
}
};
new Thread(run).start();
}

关于java - 进度条未及时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647738/

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