package com.croftsoft.apps.exemplar; import java.util.*; import javax.swing.*; import com.croftsoft.core.gui.LifecycleWindowListener; import com.croftsoft.core.lang.lifecycle.CompositeLifecycle; import com.croftsoft.core.lang.lifecycle.Destroyable; import com.croftsoft.core.lang.lifecycle.Initializable; import com.croftsoft.core.lang.lifecycle.Lifecycle; import com.croftsoft.core.lang.lifecycle.Startable; import com.croftsoft.core.lang.lifecycle.Stoppable; import com.croftsoft.core.lang.lifecycle.Updatable; import com.croftsoft.core.util.loop.EventQueueUpdateLoop; import com.croftsoft.core.util.loop.Looper; import com.croftsoft.core.util.loop.NanoTimeLoopGovernor; /********************************************************************* * Exemplar main. * * Launches the application within a framework. * * @version * $Id: Main.java,v 1.10 2006/06/22 13:46:22 croft Exp $ * @since * 2006-01-03 * @author * David Wallace Croft *********************************************************************/ public final class Main ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// { public static void main ( final String [ ] args ) ////////////////////////////////////////////////////////////////////// { final Config config = Config.load ( args ); System.out.println ( "\n" + config.getInfo ( ) ); final Queue requestQueue = new LinkedList ( ); final Queue eventQueue = new LinkedList ( ); final Model model = new Model ( config, requestQueue, eventQueue ); final JFrame jFrame = new JFrame ( ); final View view = new View ( config, model, eventQueue, jFrame ); final Controller controller = new Controller ( config, requestQueue ); view.addMouseListener ( controller ); final Updatable [ ] updatables = new Updatable [ ] { model, view, controller }; final Looper looper = new Looper ( new EventQueueUpdateLoop ( updatables ), // loopable new NanoTimeLoopGovernor ( config.getUpdateRate ( ) ), null, // exceptionHandler config.getThreadName ( ), Thread.MIN_PRIORITY, true ); // useDaemonThread final Lifecycle lifecycle = new CompositeLifecycle ( new Initializable [ ] { view, looper }, new Startable [ ] { view, controller, model, looper }, new Stoppable [ ] { view, looper }, new Destroyable [ ] { view, looper } ); // The Frame is the framework. LifecycleWindowListener.launchFrameAsDesktopApp ( jFrame, lifecycle, config.getFrameSize ( ), config.getShutdownConfirmationPrompt ( ) ); } ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// }