protected void startRun() {
		ProgramStartupListener listener = new ProgramStartupListener();
		Component root = getRootPane();
		if (root.isShowing()) {
			root.addComponentListener(listener);
			root.validate();
			JTFTools.pause(STARTUP_DELAY);
			synchronized (listener) {
				while (!isStarted()) {
					try {
						listener.wait(STARTUP_CYCLE);
					} catch (InterruptedException ex) {
						/* Empty */
					}
				}
			}
			root.update(root.getGraphics());
		}
		root.setCursor(Cursor.getDefaultCursor());
		initFinished = true;
		startHook();
		runHook();
		endHook();
		if (!root.isShowing() && !getContentPane().isShowing()) exit();
	}