我有一个带有 CardLayout 组件的 JFrame。我正在使用 CardLayout 在应用程序执行的不同时刻在不同的 JPanel 之间切换。在某些时候,我使用 SwingWorker 对象来生成一些 XML 文件。这次我想在我的窗口中显示另一个 JPanel 来告诉用户等待。在这个 JPanel 上,我想在 3 个标签之间切换。
- JLabel 1 将是:“请稍候。”
- JLabel 2 将是:“请稍候..”
- JLabel 3 将是:“请稍候...”
现在代码如下所示:
ConvertersWorker.execute();
CLayout.show(Cards, WAIT_PANEL);
Timer t =new Timer(500, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
WaitPanel.SwitchLabels();
}
});
t.start();
while (!this.finishedConverting)
{
}
//After this im am executing other methods based on the generated XML files
SwingWorker 代码:
SwingWorker<Boolean, Void> ConvertersWorker = new SwingWorker<Boolean, Void>() {
public Boolean doInBackground() {
Boolean result = RunConverters();
return result;
}
public void done() {
try {
finishedConverting = get();
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (ExecutionException ex) {
ex.printStackTrace();
}
}
} ;
第二个 JPanel 甚至没有显示,因为 JFrame 阻塞。它由于 while 循环而阻塞,但我不知道如何以不同的方式实现它。SwingWorker 中的 done() 方法也永远不会执行。如果它被执行,那么finishedConverting 变量将被设置为true,while 循环将停止。谁能帮我找到更好的解决方案?