• R/O
  • HTTP
  • SSH
  • HTTPS

CharacterManaJ: Commit

キャラクターなんとかJの本体


Commit MetaInfo

Revision0c2d6bcd783a0d2ad42e3616e0a09567a00f5d08 (tree)
Time2018-12-28 19:42:19
Authorseraphy <seraphy@user...>
Commiterseraphy

Log Message

OSXのスクリーンメニュー表示タイミングの修正

Change Summary

Incremental Difference

--- a/src/main/java/charactermanaj/Main.java
+++ b/src/main/java/charactermanaj/Main.java
@@ -339,9 +339,17 @@ public final class Main implements Runnable {
339339 // OSXでJava9以降であればOracle実装でDockIconを設定する.
340340 MainFramePartialForMacOSX9.setupDockIcon();
341341
342+ // スクリーンメニュー類を設定する.
343+ // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
344+ MainFramePartialForMacOSX9.setupScreenMenu();
345+
342346 } else {
343347 // Java9未満であればeawtでDockIcon類を設定する.
344348 MainFramePartialForMacOSX.setupDockIcon();
349+
350+ // スクリーンメニューからのイベントをハンドルできるようにする.
351+ // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
352+ MainFramePartialForMacOSX.setupScreenMenu();
345353 }
346354
347355 } catch (Throwable ex) {
@@ -366,22 +374,6 @@ public final class Main implements Runnable {
366374 // デフォルトのプロファイルを開く.
367375 // (最後に使ったプロファイルがあれば、それが開かれる.)
368376 final MainFrame mainFrame = ProfileListManager.openDefaultProfile();
369- if (isMacOSX()) {
370- try {
371- if (JavaVersionUtils.getJavaVersion() >= 9) {
372- // OSXでJava9以降であればOracle実装でスクリーンメニュー類を設定する.
373- MainFramePartialForMacOSX9.setupScreenMenu(mainFrame);
374-
375- } else {
376- // Java9未満であればeawtでスクリーンメニュー類を設定する.
377- // MacOSXであればスクリーンメニューからのイベントをハンドルできるようにする.
378- MainFramePartialForMacOSX.setupScreenMenu(mainFrame);
379- }
380-
381- } catch (Throwable ex) {
382- logger.log(Level.CONFIG, "Failed to setup the screen menu.", ex);
383- }
384- }
385377
386378 // 表示(および位置あわせ)
387379 mainFrame.showMainFrame();
--- a/src/main/java/charactermanaj/ui/MainFramePartialForMacOSX.java
+++ b/src/main/java/charactermanaj/ui/MainFramePartialForMacOSX.java
@@ -30,11 +30,34 @@ public class MainFramePartialForMacOSX {
3030 super();
3131 }
3232
33- public static void setupScreenMenu(final MainFrame mainFrame) {
34- if (mainFrame == null) {
35- throw new IllegalArgumentException();
33+ /**
34+ * DockIconを設定する
35+ */
36+ public static void setupDockIcon() {
37+ try {
38+ Application app = Application.getApplication();
39+ Class<?> clz = app.getClass();
40+
41+ BufferedImage icon = UIHelper.getInstance().getImage("icons/icon.png");
42+
43+ Method mtd = clz.getMethod("setDockIconImage", new Class[] {Image.class});
44+ mtd.invoke(app, new Object[] { icon });
45+
46+ } catch (NoSuchMethodException ex) {
47+ // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
48+ logger.log(Level.CONFIG, "dockIcon not supported.", ex);
49+
50+ } catch (Exception ex) {
51+ // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
52+ logger.log(Level.WARNING, "dockIcon failed.", ex);
3653 }
54+ }
3755
56+ /**
57+ * スクリーンメニューを設定する
58+ * @param mainFrame
59+ */
60+ public static void setupScreenMenu() {
3861 Application app = Application.getApplication();
3962
4063 app.setEnabledAboutMenu(true);
@@ -64,24 +87,4 @@ public class MainFramePartialForMacOSX {
6487 };
6588 app.addApplicationListener(listener);
6689 }
67-
68- public static void setupDockIcon() {
69- try {
70- Application app = Application.getApplication();
71- Class<?> clz = app.getClass();
72-
73- BufferedImage icon = UIHelper.getInstance().getImage("icons/icon.png");
74-
75- Method mtd = clz.getMethod("setDockIconImage", new Class[] {Image.class});
76- mtd.invoke(app, new Object[] { icon });
77-
78- } catch (NoSuchMethodException ex) {
79- // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
80- logger.log(Level.CONFIG, "dockIcon not supported.", ex);
81-
82- } catch (Exception ex) {
83- // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
84- logger.log(Level.WARNING, "dockIcon failed.", ex);
85- }
86- }
8790 }
--- a/src/main/java/charactermanaj/ui/MainFramePartialForMacOSX9.java
+++ b/src/main/java/charactermanaj/ui/MainFramePartialForMacOSX9.java
@@ -29,6 +29,11 @@ public class MainFramePartialForMacOSX9 {
2929 super();
3030 }
3131
32+ /**
33+ * DockIconを設定する
34+ *
35+ * @throws Exception 失敗した場合
36+ */
3237 public static void setupDockIcon() throws Exception {
3338 Class<?> taskbarCls = Class.forName("java.awt.Taskbar");
3439 Object taskbar = taskbarCls.getMethod("getTaskbar").invoke(null);
@@ -36,7 +41,14 @@ public class MainFramePartialForMacOSX9 {
3641 Image icon = ImageIO.read(Main.class.getResource("/icons/icon.png"));
3742 setIconImageMethod.invoke(taskbar, icon);
3843 }
39- public static void setupScreenMenu(final MainFrame mainFrame) throws Exception {
44+
45+ /**
46+ * スクリーンメニューを設定する
47+ *
48+ * @param mainFrame メインフレーム
49+ * @throws Exception 失敗
50+ */
51+ public static void setupScreenMenu() throws Exception {
4052 // Java9以降であればOracle実装でスクリーンメニュー類を設定する.
4153 // (jdk5でコンパイルする都合上、無理矢理リフレクション経由のDynamicProxyでハンドラを作っている)
4254
Show on old repository browser