1 package helloagain.kanday;
2
3 import java.util.logging.Logger;
4
5
6 /***
7 * KandayMain.java
8 *
9 * HelloAgain Desktop編プログラムのmainを提供するクラス。
10 * 主要機能は、
11 * <ul>
12 * <li>プログラム起動時のスプラッシュ画面表示制御
13 * <li>KandayPreferecesの生成
14 * <li>KandayFrameの生成
15 * <li>シャットダウンフックで終了前に設定の保存
16 * </ul>
17 * <p>
18 * コマンドライン引数
19 * <ul>
20 * <li>-nologo スプラッシュを表示しない
21 * <li>-notoolbar ツールバーを表示しない(未実装)
22 * </ul>
23 * <p>
24 * Created: Wed May 26 12:54:18 2004
25 *
26 * @author <a href="mailto:torutk@02.246.ne.jp">TAKAHASHI,Toru</a>
27 * @version 1.0
28 */
29
30 public class KandayMain{
31
32 /***
33 * プログラム起動時に呼ばれる<code>main</code>メソッド。
34 * @param args コマンドライン引数
35 */
36 public static final void main(final String[] args) {
37 logger.entering(MYCLASS, "main", args);
38 startTime = System.currentTimeMillis();
39
40 for (int i=0; i<args.length; i++) {
41 if ("-nologo".equals(args[i])) {
42
43 isSplash = false;
44 } else if ("-notoolbar".equals(args[i])) {
45
46 }
47 }
48
49
50 showSplash();
51
52 final KandayPreferences pref = new KandayPreferences();
53 final KandayFrame frame = new KandayFrame(pref);
54
55
56 Runtime.getRuntime().addShutdownHook(new Thread() {
57 public void run() {
58 savePreferences(pref, frame);
59 }
60 });
61
62
63 waitSplash();
64
65 frame.setVisible(true);
66 logger.exiting(MYCLASS, "main");
67 }
68
69 /***
70 * 実行するコンピュータの画面中央に位置するスプラッシュ画面を
71 * 生成する。クラス変数<code>isSplash</code>が偽であれば、即時
72 * リターンする。
73 */
74 private static void showSplash() {
75 logger.entering(MYCLASS, "showSplash");
76 if (isSplash == false) {
77 logger.config("Splash is disabled");
78 return;
79 }
80
81 splash = new KandaySplash();
82 splash.setVisible(true);
83 logger.exiting(MYCLASS, "showSplash");
84 }
85
86 /***
87 * 表示されているスプラッシュ画面を消去するタイミングを図り、
88 * スプラッシュ画面を破棄する。
89 * 定数SPLASH_DURATION_TIMEミリ秒の経過を待つ。ただし、プログラムが
90 * 起動されてから本メソッドが呼ばれるまでに経過した時間を差っ引いて
91 * いる。
92 */
93 private static void waitSplash() {
94 logger.entering(MYCLASS, "waitSplash");
95 if (isSplash == false) {
96 return;
97 }
98 long lapse = System.currentTimeMillis() - startTime;
99 if (lapse < SPLASH_DURATION_TIME ) {
100 try {
101 Thread.sleep(SPLASH_DURATION_TIME - lapse);
102 } catch (InterruptedException e) {
103
104 }
105 }
106 splash.setVisible(false);
107 logger.exiting(MYCLASS, "waitSplash");
108 }
109
110 /***
111 * 永続化対象データを保存する処理を呼び出す。
112 * @param aPreferences 永続化の処理を行うインスタンス
113 * @param aFrame 永続化対象データの取得に必要
114 */
115 private static void savePreferences(
116 KandayPreferences aPreferences, KandayFrame aFrame
117 ) {
118 logger.entering(MYCLASS, "savePreferences",
119 new Object[] {aPreferences, aFrame}
120 );
121 int positionX = aFrame.getLocation().x;
122 int positionY = aFrame.getLocation().y;
123 int width = aFrame.getWidth();
124 int height = aFrame.getHeight();
125
126 aPreferences.setFramePositionX(positionX);
127 aPreferences.setFramePositionY(positionY);
128 aPreferences.setFrameWidth(width);
129 aPreferences.setFrameHeight(height);
130 aPreferences.save();
131
132 logger.exiting(MYCLASS, "savePreferences");
133 }
134
135 /*** スプラッシュ画面を表示する時間[ms] */
136 private final static int SPLASH_DURATION_TIME = 5000;
137 /*** スプラッシュ画面の表示有無を示すフラグ */
138 private static boolean isSplash = true;
139 /*** スプラッシュ画面インスタンス */
140 private static KandaySplash splash;
141 /*** スプラッシュ画面表示開始時間を保持 */
142 private static long startTime;
143
144
145 private static final String MYCLASS = KandayMain.class.getName();
146 private static Logger logger = Logger.getLogger(MYCLASS);
147 }