001 package com.croftsoft.apps.skipper; 002 003 import java.awt.*; 004 import java.util.logging.*; 005 import javax.swing.*; 006 007 import com.croftsoft.core.gui.LifecycleWindowListener; 008 import com.croftsoft.core.lang.lifecycle.Lifecycle; 009 import com.croftsoft.core.lang.lifecycle.LifecycleLib; 010 import com.croftsoft.core.util.loop.EventQueueUpdateLoop; 011 import com.croftsoft.core.util.loop.Looper; 012 import com.croftsoft.core.util.loop.NanoTimeLoopGovernor; 013 014 /*********************************************************************** 015 * Skipper Main. 016 * 017 * Copyright 2007 David Wallace Croft. 018 * 019 * @version 020 * $Date: 2007/07/28 16:57:04 $ $Author: croft $ 021 * @since 022 * 2006-12-19 023 * @author 024 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 025 ***********************************************************************/ 026 027 public final class SkipperMain 028 implements Lifecycle 029 //////////////////////////////////////////////////////////////////////// 030 //////////////////////////////////////////////////////////////////////// 031 { 032 033 private final SkipperConfig skipperConfig; 034 035 private final SkipperModel skipperModel; 036 037 private final SkipperView skipperView; 038 039 private final Looper looper; 040 041 //////////////////////////////////////////////////////////////////////// 042 // public static methods 043 //////////////////////////////////////////////////////////////////////// 044 045 public static void main ( final String [ ] args ) 046 //////////////////////////////////////////////////////////////////////// 047 { 048 final Logger logger = Logger.getLogger ( 049 SkipperMain.class.getPackage ( ).getName ( ) ); 050 051 logger.setLevel ( Level.INFO ); 052 053 final Handler handler = new ConsoleHandler ( ); 054 055 handler.setLevel ( Level.WARNING ); 056 057 logger.addHandler ( handler ); 058 059 final SkipperMain skipperMain = new SkipperMain ( args ); 060 061 final JFrame jFrame = new JFrame ( 062 skipperMain.skipperConfig.getFrameTitle ( ) ); 063 064 skipperMain.setContentPane ( jFrame.getContentPane ( ) ); 065 066 // The Frame is the framework. 067 068 LifecycleWindowListener.launchFrameAsDesktopApp ( 069 jFrame, 070 skipperMain, 071 skipperMain.skipperConfig.getFrameSize ( ), 072 skipperMain.skipperConfig.getShutdownConfirmationPrompt ( ) ); 073 } 074 075 //////////////////////////////////////////////////////////////////////// 076 //////////////////////////////////////////////////////////////////////// 077 078 public SkipperMain ( final String [ ] args ) 079 //////////////////////////////////////////////////////////////////////// 080 { 081 skipperConfig = SkipperConfig.load ( args ); 082 083 skipperModel = new SkipperModel ( skipperConfig ); 084 085 skipperView = new SkipperView ( skipperConfig, skipperModel ); 086 087 looper = new Looper ( 088 new EventQueueUpdateLoop ( skipperView ), // loopable 089 new NanoTimeLoopGovernor ( skipperConfig.getUpdateRate ( ) ), 090 null, // exceptionHandler 091 skipperConfig.getThreadName ( ), 092 Thread.MIN_PRIORITY, 093 true ); // useDaemonThread 094 } 095 096 //////////////////////////////////////////////////////////////////////// 097 // accessor methods 098 //////////////////////////////////////////////////////////////////////// 099 100 public SkipperConfig getSkipperConfig ( ) 101 //////////////////////////////////////////////////////////////////////// 102 { 103 return skipperConfig; 104 } 105 106 //////////////////////////////////////////////////////////////////////// 107 // mutator methods 108 //////////////////////////////////////////////////////////////////////// 109 110 public void setContentPane ( final Container contentPane ) 111 //////////////////////////////////////////////////////////////////////// 112 { 113 skipperView.setContentPane ( contentPane ); 114 } 115 116 //////////////////////////////////////////////////////////////////////// 117 // interface Lifecycle methods 118 //////////////////////////////////////////////////////////////////////// 119 120 public void init ( ) 121 //////////////////////////////////////////////////////////////////////// 122 { 123 LifecycleLib.init ( skipperModel, skipperView, looper ); 124 } 125 126 public void start ( ) 127 //////////////////////////////////////////////////////////////////////// 128 { 129 LifecycleLib.start ( looper ); 130 } 131 132 public void stop ( ) 133 //////////////////////////////////////////////////////////////////////// 134 { 135 LifecycleLib.stop ( looper ); 136 } 137 138 public void destroy ( ) 139 //////////////////////////////////////////////////////////////////////// 140 { 141 LifecycleLib.destroy ( looper, skipperModel ); 142 143 try 144 { 145 skipperConfig.save ( ); 146 } 147 catch ( final Exception ex ) 148 { 149 ex.printStackTrace ( ); 150 } 151 } 152 153 //////////////////////////////////////////////////////////////////////// 154 //////////////////////////////////////////////////////////////////////// 155 }