gpt4 book ai didi

Java ProgressMonitor 不工作

转载 作者:行者123 更新时间:2023-11-29 09:35:46 25 4
gpt4 key购买 nike

我下面的代码不起作用,谁能告诉我为什么?还请更正我的代码,我是 Java 的新手。除此之外,我正在寻找“加载面板组件”,类似于 ProgressMonitor 但可能更具吸引力并且动画效果更好。如果有人以前使用过此类东西,请建议我。

public class Main extends JFrame {

private JPanel contentPane;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);

ProgressMonitor pm = new ProgressMonitor(frame, "Loading...",
"waiting...",
0, 100000);

for (int i = 0 ; i < 100000 ; i ++){

pm.setProgress(i);
pm.setNote("Testing");
System.out.println(i);

Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public Main() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}

}

最佳答案

正如@Mark Rotteveel 已经指出的那样,您正在占用 EDT(事件调度线程)。 'How to show progress bars/monitors'上的教程包含有值(value)的信息和代码示例。

但基本上归结为将您的计算转移到工作线程(例如使用 SwingWorker),并在 EDT 上显示 ProgressMonitor。由工作线程向 ProgressMonitor 指示已经取得的进展。

here是指向该教程示例代码的直接链接,它清楚地显示了如何在 SwingWorker 扩展(该示例中的 Task 类)中完成工作,以及 ProgressMonitor 通过将 PropertyChangeListener 添加到 SwingWorker 来更新,其中监听器将进度传递给 ProgressMonitor

我还建议阅读 Concurrency in Swing教程,其中包含有关如何结合 Swing 处理 Thread 的更多信息,以及为什么不能/不应该对 EDT 进行大量计算

关于Java ProgressMonitor 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11590537/

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