Java Swing Threading with Updatable JProgressBar

Posted by Anthony Sparks on Stack Overflow See other posts from Stack Overflow or by Anthony Sparks
Published on 2011-03-02T04:47:14Z Indexed on 2011/03/02 7:24 UTC
Read the original article Hit count: 340

First off I've been working with Java's Concurency package quite a bit lately but I have found an issue that I am stuck on. I want to have and Application and the Application can have a SplashScreen with a status bar and the loading of other data. So I decided to use SwingUtilities.invokeAndWait( call the splash component here ). The SplashScreen then appears with a JProgressBar and runs a group of threads. But I can't seem to get a good handle on things. I've looked over SwingWorker and tried using it for this purpose but the thread just returns. Here is a bit of sudo-code. and the points I'm trying to achieve.

  • Have an Application that has a SplashScreen that pauses while loading info
  • Be able to run multiple threads under the SplashScreen
  • Have the progress bar of the SplashScreen Update-able yet not exit until all threads are done.

    Launching splash screen

 try {
   SwingUtilities.invokeAndWait( SplashScreen );
 } catch (InterruptedException e) {
 } catch (InvocationTargetException e) { }

Splash screen construction

 SplashScreen extends JFrame implements Runnable{

   public void run() {
      //run threads
      //while updating status bar
   }
 }

I have tried many things including SwingWorkers, Threads using CountDownLatch's, and others. The CountDownLatch's actually worked in the manner I wanted to do the processing but I was unable to update the GUI. When using the SwingWorkers either the invokeAndWait was basically nullified (which is their purpose) or it wouldn't update the GUI still even when using a PropertyChangedListener. If someone else has a couple ideas it would be great to hear them. Thanks in advance.

© Stack Overflow or respective owner

Related posts about java

Related posts about multithreading