在按钮单击中显示加载 GIF,并在执行操作后再次隐藏它



我有以下JFrame,里面有一个足够简单的退出应用程序方法。我正在尝试添加某种加载器(最好是微调器 GIF(。但是,目前我刚刚添加了一个名为 load 的 JLabel 来显示文本"加载..."在按钮单击时。

问题是消息框(即操作(在我的函数中根本没有显示,并且加载 JLabel 继续显示。谁能解释为什么这不起作用,并给我关于如何用 GIF 替换加载文本的建议。任何帮助都会很棒。

public void Exit() {
btnExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// event start
loading.setVisible(true);
new SwingWorker<Void, String>() {
@Override
protected Void doInBackground() throws Exception {
Thread.sleep(100);
return null;
}
@Override
protected void done() {
// event start
loading.setVisible(false);
// prompt user input message box //
int close = JOptionPane.showConfirmDialog(panel,"Are you sure?",
"Information", JOptionPane.YES_NO_OPTION);
// await user selection.
if(close == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
};
}
});
}

创建SwingWorker本身是不够的。您必须在创建它后调用其 execute(( 方法。

安排此 SwingWorker 在工作线程上执行。有 许多工作线程可用。如果所有工作线程 正忙于处理其他摆动工人,此摆动工人被放置在 等待队列。

注意:SwingWorker 只设计为执行一次。正在执行 SwingWorker 多次不会导致调用 doInBackground 方法两次。

在您的情况下:

SwingWorker<?,?> worker = new SwingWorker<Void, String>() {
@Override
protected Void doInBackground() throws Exception {
Thread.sleep(100);
return null;
}
@Override
protected void done() {
// event start
loading.setVisible(false);
// prompt user input message box //
int close = JOptionPane.showConfirmDialog(panel,"Are you sure?",
"Information", JOptionPane.YES_NO_OPTION);
// await user selection.
if(close == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
};
worker.execute(); //Execute the worker

最新更新