private static void createSplashScreenCloseListeners(final JFrame parentFrame) {
		hideSplashWindowTimer = new Timer(500, null);
		ActionListener timerListener = e -> {

			Msg.trace(SplashScreen.class, "Splash Screen - hide timer activated");

			if (isApplicationVisible()) {

				// a docking application has been launched--we are no longer needed
				Msg.trace(SplashScreen.class, "Splash Screen closed due to application launch");
				disposeSplashScreen();
				hideSplashWindowTimer.stop();
			}

			if (hiddenWindowHasModalChildren()) {
				// can't dispose our windows because it will close the modal dialog
				Msg.trace(SplashScreen.class, "Splash Screen has modal children--not closing");
				return;
			}

			if (nonHiddenFrameExists()) {
				// this handles the case where we have some sort of application that does not
				// use the DockingWindowManager--try to do something reasonable
				Msg.trace(SplashScreen.class,
					"Splash Screen closed due to non-docking application launch");
				disposeSplashScreen();
				hideSplashWindowTimer.stop();
			}
		};
		hideSplashWindowTimer.addActionListener(timerListener);
		hideSplashWindowTimer.setRepeats(true);
		hideSplashWindowTimer.start();

		// This listener gives us a more responsive close, but it does not work if the window
		// is deactivated before an application window is launched.  We rely on the timer above to
		// handle that case.
		parentFrame.addWindowListener(new WindowAdapter() {
			@Override
			public void windowDeactivated(WindowEvent e) {

				Msg.trace(SplashScreen.class,
					"Splash Screen - parent window deactivated.  Parent: " + getTitle(parentFrame));
				if (hiddenWindowHasModalChildren()) {
					// can't dispose our windows because it will close the modal dialog
					Msg.trace(SplashScreen.class, "Splash Screen has modal children--not closing");
					return;
				}

				Window window = e.getOppositeWindow();
				if (window != null) {
					// some other window is shown, let's not occlude it
					Msg.trace(SplashScreen.class,
						"Splash Screen new non-splash window showing--closing. Window: " +
							getTitle(window));
					disposeSplashScreen();
				}
			}

		});
	}
Show the splash screen on the Swing thread now.  This will block.
@return the new splash screen
Ghidra/Framework/Docking/src/main/java/docking/framework/SplashScreen.java