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: 423
        
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