gpt4 book ai didi

java - 我应该在 SwingWorker.doInBackground() 中使用 SwingUtilities.invokeLater() 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:23 25 4
gpt4 key购买 nike

从 swing worker 与 EDT 交互的常用方法是使用 get() 方法。但是我有一个很长的任务和这样的代码:

public Void doInBackground() {
for(Object o : objects) {
doSomething();
MyGlobalGUIConsole.addMessage("Done for " + o);
}
}

在大多数教程中,建议使用返回值将某些东西从 SwingWorker 返回到 EDT,但我可以:

public Void doInBackground() {
for(Object o : objects) {
doSomething();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyGlobalGUIConsole.addMessage("Done for " + o);
}
});
}
}

最佳答案

你可以,但是 SwingWorker 有设计用来报告后台任务进度的方法:你从 doInBackground() 调用 publish() 来发布进度,然后你覆盖process()(在 EDT 中调用)以显示进度。所以上面的代码可以重写为:

public Void doInBackground() {
for(Object o : objects) {
doSomething();
publish("Done for " + o);
}
}

@Override
protected void process(List<String> messages) {
for (String message : messages) {
MyGlobalGUIConsole.addMessage(message);
}
}

关于java - 我应该在 SwingWorker.doInBackground() 中使用 SwingUtilities.invokeLater() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11897647/

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