public static void main(String[] commandLineArgs)
	{
		System.out.println("Ucigame version " + VERSION);
		if (commandLineArgs.length < 1)
		{
			logError("Please repeat the program name.  For example, java MyGame MyGame");
			System.exit(0);
		}

		String className = commandLineArgs[0];
		Object object = null;
		try {
			// see www.javageeks.com/Papers/ClassForName/ClassForName.pdf
			// for info on the next line
			Class<?> classDefinition = Class.forName(className, true,
									ClassLoader.getSystemClassLoader());
			object = classDefinition.newInstance();
			if (object instanceof Ucigame)
				gameObject = (Ucigame)object;
			else
			{
				logError("Class " + className + " does not extend Ucigame.");
				System.exit(0);
			}
		}
		catch (InstantiationException e) {
        	System.out.println(e);
        	System.exit(0);

		}
		catch (IllegalAccessException e) {
        	System.out.println(e);
        	System.exit(0);
		}
		catch (ClassNotFoundException e) {
        	logError("No class found with name " + className);
        	System.exit(0);
		}
		catch (NoClassDefFoundError e) {
        	logError("No class definition found with name " + className);
        	System.exit(0);
		}

		gameObject.isApplet = false;

		// Execute a job on the event-dispatching thread:
		// creating this applet's GUI.
		try {
			javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
				public void run() {
					gameObject.setupGUI();
				}
			});
		} catch (Exception e) {
			System.err.println("setupGUI didn't successfully complete\n" + e);
			e.printStackTrace();
		}
		staticworker = new StaticUcigameWorker();
		staticworker.execute();   // returns immediately, background thread continues
	}