I have done very little with Swing, so this may be a stupid question, but is there any reason you can't put your initialization code in a method, call that method and then destroy the splash screen when the method is complete?
Alternatively, you could put your initialization code in a second
thread. Your main code could display the splash screen, start the second thread to handle initialization, call join() on the second thread (so the main code waits until the initialization thread has completed) and then destroys the splash screen....