OSDN Git Service

OSXのスクリーンメニュー表示タイミングの修正
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / Main.java
index 932ab9b..52a0663 100644 (file)
@@ -7,7 +7,6 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.lang.Thread.UncaughtExceptionHandler;
-import java.lang.reflect.Method;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Locale;
@@ -27,6 +26,7 @@ import charactermanaj.graphics.io.ImageCacheMBeanImpl;
 import charactermanaj.model.AppConfig;
 import charactermanaj.model.util.StartupSupport;
 import charactermanaj.ui.MainFrame;
+import charactermanaj.ui.MainFramePartialForMacOSX;
 import charactermanaj.ui.MainFramePartialForMacOSX9;
 import charactermanaj.ui.ProfileListManager;
 import charactermanaj.ui.SelectCharatersDirDialog;
@@ -318,7 +318,7 @@ public final class Main implements Runnable {
                        }
 
                        // スタートアップ時の初期化
-                       // ver0.999ではキャラクターデータディレクトリに依存しない初期化部しかないので最初に移動する。
+                       // ver0.999ではキャラクターデータディレクトリに依存しない初期化部しかないので最初に実行する。
                        // (APPDATAからLOCALAPPDATAへの移動処理などがあるため、先に行う必要がある。)
                        StartupSupport.getInstance().doStartup();
 
@@ -332,15 +332,38 @@ public final class Main implements Runnable {
                                }
                        }
 
+                       // OSXであれば、DockIconを先に設定する
+                       if (isMacOSX()) {
+                               try {
+                                       if (JavaVersionUtils.getJavaVersion() >= 9) {
+                                               // OSXでJava9以降であればOracle実装でDockIconを設定する.
+                                               MainFramePartialForMacOSX9.setupDockIcon();
+
+                                               // スクリーンメニュー類を設定する.
+                                               // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
+                                               MainFramePartialForMacOSX9.setupScreenMenu();
+
+                                       } else {
+                                               // Java9未満であればeawtでDockIcon類を設定する.
+                                               MainFramePartialForMacOSX.setupDockIcon();
+
+                                               // スクリーンメニューからのイベントをハンドルできるようにする.
+                                               // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
+                                               MainFramePartialForMacOSX.setupScreenMenu();
+                                       }
+
+                               } catch (Throwable ex) {
+                                       logger.log(Level.CONFIG, "Failed to setup the dock icon.", ex);
+                               }
+                       }
+
                        if (currentCharacterDir == null) {
                                // キャラクターセットディレクトリの選択
-                               File defaultCharacterDir = ConfigurationDirUtilities
-                                               .getDefaultCharactersDir();
-                               currentCharacterDir = SelectCharatersDirDialog
-                                               .getCharacterDir(defaultCharacterDir);
+                               File defaultCharacterDir = ConfigurationDirUtilities.getDefaultCharactersDir();
+                               currentCharacterDir = SelectCharatersDirDialog.getCharacterDir(defaultCharacterDir);
                                if (currentCharacterDir == null) {
                                        // キャンセルされたので終了する.
-                                       logger.info("luncher canceled.");
+                                       logger.info("launcher canceled.");
                                        return;
                                }
                        }
@@ -351,29 +374,6 @@ public final class Main implements Runnable {
                        // デフォルトのプロファイルを開く.
                        // (最後に使ったプロファイルがあれば、それが開かれる.)
                        final MainFrame mainFrame = ProfileListManager.openDefaultProfile();
-                       if (isMacOSX()) {
-                               try {
-                                       if (JavaVersionUtils.getJavaVersion() >= 9) {
-                                               // OSXでJava9以降であればOracle実装でスクリーンメニュー類を設定する.
-                                               MainFramePartialForMacOSX9.setupScreenMenu(mainFrame);
-
-                                       } else {
-                                               // Java9未満であればeawtでスクリーンメニュー類を設定する.
-                                               // MacOSXであればスクリーンメニューからのイベントをハンドルできるようにする.
-                                               // OSXにしか存在しないクラスを利用するためリフレクションとしている.
-                                               // ただしJDKによっては、Apple Java Extensionsがないことも予想されるので、
-                                               // その場合はエラーにしない。
-                                               Class<?> clz = Class
-                                                               .forName("charactermanaj.ui.MainFramePartialForMacOSX");
-                                               Method mtd = clz.getMethod("setupScreenMenu",
-                                                               MainFrame.class);
-                                               mtd.invoke(null, mainFrame);
-                                       }
-
-                               } catch (Throwable ex) {
-                                       logger.log(Level.CONFIG, "Failed to setup the screen menu.", ex);
-                               }
-                       }
 
                        // 表示(および位置あわせ)
                        mainFrame.showMainFrame();