开发者

java jprogressbar hangs during heavy operation

开发者 https://www.devze.com 2023-01-15 04:57 出处:网络
I\'m writing a java program and, before I call a method that makes heavy use of the CPU, I display a frame with a JProgressBar on it. Although I display it before the method is called, the JProgressBa

I'm writing a java program and, before I call a method that makes heavy use of the CPU, I display a frame with a JProgressBar on it. Although I display it before the method is called, the JProgressBar is not shown until the method is over. The pro开发者_运维知识库gress bar does not interact with the method in any way (yet) and that's why I am confused. It is something like:

progressbarframe.setVisible(true); // it is a indeterminate progress bar
heavyLoadMethod();
progressbarframe.dispose();

The frame shows, but the progress bar doesn't initialize during the method. Is there any way I can solve this without using threads? What would be the simplest way?

Thank you for your time


You should call the heavyLoadMethod in a separate thread. You can use a java.util.concurrent.Executor for it:

Executor executor = java.util.concurrent.Executors.newSingleThreadExecutor();
executor.submit(new Runnable() { public void run() { heavyLoadMethod();}});

Now the method will be called in a separate thread and the progress bar will be displayed properly.


You are blocking the EDT from repainting the GUI.

Read the section from the Swing tutorial on Concurrency in Swing for a full explanation of the problem.

Also, read the section on "How to Use Progress Bars" for a working example.

0

精彩评论

暂无评论...
验证码 换一张
取 消