protected void startRun() {
		ProgramStartupListener listener = new ProgramStartupListener();
		Component root = getRootPane();
		if (root.isShowing()) {
			root.addComponentListener(listener);
			root.validate();
			listener.waitForStartup(this);
			root.update(root.getGraphics());
		}
		root.setCursor(Cursor.getDefaultCursor());
		initFinished = true;
		startHook();
		runHook();
		endHook();
		if (!root.isShowing() && !getContentPane().isShowing()) exit();
	}