gpt4 book ai didi

java - 更新 JFrame 中的 JPanel

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:50 25 4
gpt4 key购买 nike

我有一个带有 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();
}
}
} ;

由于 JFrame 阻塞,第二个 JPanel 甚至没有显示。它由于 while 循环而阻塞,但我不知道如何以不同的方式实现它。而且 SwingWorker 中的 did() 方法也永远不会被执行。如果它被执行,那么 finishConverting 变量将被设置为 true 并且 while 循环将停止。谁能帮我找到更好的解决方案?

最佳答案

我知道你解决了这个问题,但发生这种情况是因为你只使用了一个线程,并且它由于While而被阻塞,所以你需要创建一个新的线程来处理这个

new Thread(){  
public void run() {
//code here
}
}.start();

并刷新 JPanel 的内容,您可以使用

myJpanel.doLayout();

myJpanel.repaint();

关于java - 更新 JFrame 中的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420493/

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