gpt4 book ai didi

java - SwingWorker doInBackground 执行时的用户输入

转载 作者:行者123 更新时间:2023-11-30 07:13:14 25 4
gpt4 key购买 nike

我正在使用 SwingWorker 在后台执行某些操作。在执行期间,我有一个条件,我需要通过抛出一个 JoptionPane.showOptionDialog() 来询问用户一些事情。我不想在我的模型类中执行此操作,也不想在执行 SwingWorker.doInBackground 时执行此操作。

我相信很多人都遇到过这个问题。

所以我必须从对 doInBackground 的调用返回,然后在 done() 中请求用户输入。然后我需要启动另一个 SwingWorker 并从 done 方法执行 doInBackground() 吗?

还有其他更整洁/更简单的方法吗?

更新(针对 mkorbel 的问题)

类设计是这样的:

public class OptionInSwingWorker {

public static void main(String[] args) {
JFrame frame=new JFrame();
JButton test = new JButton("Test");
frame.add(test);

test.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new SwingWorker<Void,Void>(){
@Override
protected Void doInBackground() throws Exception {
// check for a value in the database

// if value is something.. throw up an OptionPane
// and ask the user a question..
// then do something...
return null;
}


@Override
protected void done() {
// open some other dialog
}
}.execute();
}
});

}
}

最佳答案

进行 SwingUtilities.invokeLater 调用,执行提示并将结果返回给 SwingWorker。如果可能,让 SwingWorker 继续运行,否则就让它循环并等待它检查响应。

这将使您不必稍后返回并启动一个新的 SwingWorker。虽然,根据您正在做的事情,启动一个新的 SwingerWorker 实际上可能会更干净、更清晰。

关于java - SwingWorker doInBackground 执行时的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19633643/

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