I have an application where I am spawning several SwingWorker threads to load images while the application is starting up. I also have a login screen prior to showing them the main menu screen. The problem is that sometimes the user can login faster then it takes for the SwingWorker threads to finish and the main menu screen isn't ready to display. I've thought about putting the main execution thread to sleep for a second or two so that my SwingWorker threads will have enough time to finish, but I think there is probably a better way to handle this. Is there any type of listener or design pattern to use to know when there are no more SwingWorker threads active?