gpt4 book ai didi

java - 带有 JProgressBar 的 JDialog

转载 作者:行者123 更新时间:2023-12-01 18:55:54 24 4
gpt4 key购买 nike

Possible Duplicate:
Java GUI JProgressBar not painting

我有一个 GUI,在处理操作事件时 GUI 已锁定,因此我需要显示进度条。我可以得到 JDialog显示但进度条不会显示。我用过SwingUtilities.invokeLater()invokeAndWait()但无济于事。进度条不会显示。任何提示或帮助将不胜感激。

pb = new JProgressBar(0, 100);
pb.setPreferredSize(new Dimension(175, 40));
pb.setString("Working");
pb.setStringPainted(true);
JLabel label = new JLabel("Progress: ");
JPanel center_panel = new JPanel();
center_panel.add(label);
center_panel.add(pb);
dialog = new JDialog((JFrame) null, "Working ...");
dialog.getContentPane().add(center_panel, BorderLayout.CENTER);
dialog.pack();
dialog.setLocationRelativeTo(this); // center on screen
dialog.toFront(); // raise above other java windows
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
dialog.setVisible(true);
pb.setIndeterminate(true);
}
});
Thread.sleep(5000);
template = AcronymWizardController
.sharedInstance().readAndDislpayDocx(contdFile);
parseDocxText(contdFile);
pb.setIndeterminate(false);
savedFile.setText(contdFile.toString());
dialog.dispose();

最佳答案

Swing 是单线程 API,也就是说,所有 UI 更新和修改都是在单个线程(称为事件调度线程或 EDT)内执行的。任何阻塞该线程的事情都会阻止它处理其他更新,例如重绘。

您有多种选择。您的直接要求是将长时间运行的任务移出 EDT。为此,您可以使用 SwingWorkerThread

根据您的描述,SwingWorker 会更容易。

有关简单示例,请查看 JProgressBar won't update

如需了解更多信息,您应该查看Concurrency in Swing

您的另一个选择是使用诸如ProgressMonitor之类的东西,example here

关于java - 带有 JProgressBar 的 JDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14007066/

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