gpt4 book ai didi

java - 使用 JProgressBar 运行 JFrame

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:53 24 4
gpt4 key购买 nike

public void myMethod {
MyProgessBarFrame progFrame = new MyProgressBarFrame(); // this is a JFrame
progFrame.setVisible(true); // show my JFrame loading

// do some processing here while the progress bar is running
// .....

progFrame.setvisible(false); // hide my progress bar JFrame
} // end method myMethod

我有上面的代码。但是当我运行它时,在我关闭进度条 JFrame 之前,do some processing 部分不会处理。

我将如何显示我的进度条并告诉 Java 在 do 处理部分继续?

最佳答案

您遇到了并发性和 Swing 的经典问题。您的问题是您正在主 Swing 线程、EDT 或事件调度线程上执行长时间运行的任务,这将锁定线程直到进程完成,阻止它执行任务,包括与用户交互和绘制 GUI 图形。

解决方案是在后台线程中执行长时间运行的任务,例如 SwingWorker 对象提供的线程。然后您可以通过 SwingWorker 的发布/处理对更新进度条(如果行列式)。有关更多信息,请阅读这篇关于 Concurrency in Swing 的文章.

例如,

public void myMethod() {
final MyProgessBarFrame progFrame = new MyProgessBarFrame();
new SwingWorker<Void, Void>() {
protected Void doInBackground() throws Exception {

// do some processing here while the progress bar is running
// .....
return null;
};

// this is called when the SwingWorker's doInBackground finishes
protected void done() {
progFrame.setVisible(false); // hide my progress bar JFrame
};
}.execute();
progFrame.setVisible(true);
}

此外,如果这是从另一个 Swing 组件显示的,那么您可能应该显示模式 JDialog 而不是 JFrame。这就是为什么我在 SwingWorker 代码之后在窗口上调用 setVisible(true) 的原因——这样如果它是一个模态对话框,它就不会阻止 SwingWorker 被执行。

关于java - 使用 JProgressBar 运行 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251607/

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