1 package charactermanaj;
\r
3 import java.lang.reflect.Method;
\r
4 import java.util.logging.Level;
\r
5 import java.util.logging.Logger;
\r
7 import javax.swing.UIManager;
\r
9 import charactermanaj.model.AppConfig;
\r
10 import charactermanaj.model.util.StartupSupport;
\r
11 import charactermanaj.ui.MainFrame;
\r
12 import charactermanaj.ui.ProfileListManager;
\r
13 import charactermanaj.util.ErrorMessageHelper;
\r
14 import charactermanaj.util.ApplicationLoggerConfigurator;
\r
21 public final class Main {
\r
26 private static Logger logger;
\r
31 private static final boolean isMacOSX;
\r
38 // システムプロパティos.nameは、すべてのJVM実装に存在する.
\r
39 // 基本ディレクトリの位置の決定に使うため、
\r
40 // なによりも、まず、これを判定しないとダメ.(順序が重要)
\r
41 String lcOS = System.getProperty("os.name").toLowerCase();
\r
42 isMacOSX = lcOS.startsWith("mac os x");
\r
46 // ローカルファイルシステム上のユーザ定義ディレクトリから
\r
47 // ログの設定を読み取る.(OSにより、設定ファイルの位置が異なることに注意)
\r
48 ApplicationLoggerConfigurator.configure();
\r
49 logger = Logger.getLogger(Main.class.getName());
\r
51 } catch (Throwable ex) {
\r
52 ex.printStackTrace();
\r
56 if (logger != null) {
\r
57 logger.log(Level.INFO, "os.name=" + lcOS + "/isMacOSX=" + isMacOSX);
\r
63 * 最初のメインフレームを開いたときにMac OS Xであればスクリーンメニューの登録も行う.<br>
\r
64 * @param args 引数(未使用)
\r
66 public static void main(String[] args) {
\r
68 //System.setProperty("swing.aatext", "true");
\r
69 //System.setProperty("awt.useSystemAAFontSettings", "on");
\r
71 // MacOSXであれば、スクリーンメニューを有効化
\r
73 System.setProperty("apple.laf.useScreenMenuBar", "true");
\r
75 "com.apple.mrj.application.apple.menu.about.name",
\r
79 // 実行プラットフォームのネイティブな外観にする.
\r
80 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
\r
83 AppConfig appConfig = AppConfig.getInstance();
\r
84 appConfig.loadConfig();
\r
87 StartupSupport.getInstance().doStartup();
\r
90 // (最後に使ったプロファイルがあれば、それが開かれる.)
\r
91 MainFrame mainFrame = ProfileListManager.openDefaultProfile();
\r
93 // MacOSXであればスクリーンメニューからのイベントをハンドルできるようにする.
\r
94 // OSXにしか存在しないクラスを利用するためリフレクションとしている.
\r
95 Class<?> clz = Class.forName("charactermanaj.ui.MainFramePartialForMacOSX");
\r
96 Method mtd = clz.getMethod("setupScreenMenu", MainFrame.class);
\r
97 mtd.invoke(null, mainFrame);
\r
101 // (Mainメソッドは、このあと終了するが、Swingはアクティブなウィンドウがいるかぎりアプリケーションを終了しない.)
\r
102 mainFrame.setVisible(true);
\r
104 } catch (Throwable ex) {
\r
105 // なんらかの致命的な初期化エラーがあった場合、ログとコンソールに表示
\r
106 // ダイアログが表示されるかどうかは状況次第.
\r
107 ex.printStackTrace();
\r
108 if (logger != null) {
\r
109 logger.log(Level.SEVERE, "Application initiation failed.", ex);
\r
111 ErrorMessageHelper.showErrorDialog(null, ex);
\r
117 * Mac OS Xで動作しているか?
\r
118 * @return Max OS X上であればtrue
\r
120 public static boolean isMacOSX() {
\r