// OSXでJava9以降であればOracle実装でDockIconを設定する.
MainFramePartialForMacOSX9.setupDockIcon();
+ // スクリーンメニュー類を設定する.
+ // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
+ MainFramePartialForMacOSX9.setupScreenMenu();
+
} else {
// Java9未満であればeawtでDockIcon類を設定する.
MainFramePartialForMacOSX.setupDockIcon();
+
+ // スクリーンメニューからのイベントをハンドルできるようにする.
+ // (メニュー項目は、その時点でアクティブになっているメインフレームに転送される)
+ MainFramePartialForMacOSX.setupScreenMenu();
}
} catch (Throwable ex) {
// デフォルトのプロファイルを開く.
// (最後に使ったプロファイルがあれば、それが開かれる.)
final MainFrame mainFrame = ProfileListManager.openDefaultProfile();
- if (isMacOSX()) {
- try {
- if (JavaVersionUtils.getJavaVersion() >= 9) {
- // OSXでJava9以降であればOracle実装でスクリーンメニュー類を設定する.
- MainFramePartialForMacOSX9.setupScreenMenu(mainFrame);
-
- } else {
- // Java9未満であればeawtでスクリーンメニュー類を設定する.
- // MacOSXであればスクリーンメニューからのイベントをハンドルできるようにする.
- MainFramePartialForMacOSX.setupScreenMenu(mainFrame);
- }
-
- } catch (Throwable ex) {
- logger.log(Level.CONFIG, "Failed to setup the screen menu.", ex);
- }
- }
// 表示(および位置あわせ)
mainFrame.showMainFrame();
super();
}
- public static void setupScreenMenu(final MainFrame mainFrame) {
- if (mainFrame == null) {
- throw new IllegalArgumentException();
+ /**
+ * DockIconを設定する
+ */
+ public static void setupDockIcon() {
+ try {
+ Application app = Application.getApplication();
+ Class<?> clz = app.getClass();
+
+ BufferedImage icon = UIHelper.getInstance().getImage("icons/icon.png");
+
+ Method mtd = clz.getMethod("setDockIconImage", new Class[] {Image.class});
+ mtd.invoke(app, new Object[] { icon });
+
+ } catch (NoSuchMethodException ex) {
+ // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
+ logger.log(Level.CONFIG, "dockIcon not supported.", ex);
+
+ } catch (Exception ex) {
+ // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
+ logger.log(Level.WARNING, "dockIcon failed.", ex);
}
+ }
+ /**
+ * スクリーンメニューを設定する
+ * @param mainFrame
+ */
+ public static void setupScreenMenu() {
Application app = Application.getApplication();
app.setEnabledAboutMenu(true);
};
app.addApplicationListener(listener);
}
-
- public static void setupDockIcon() {
- try {
- Application app = Application.getApplication();
- Class<?> clz = app.getClass();
-
- BufferedImage icon = UIHelper.getInstance().getImage("icons/icon.png");
-
- Method mtd = clz.getMethod("setDockIconImage", new Class[] {Image.class});
- mtd.invoke(app, new Object[] { icon });
-
- } catch (NoSuchMethodException ex) {
- // メソッドがない = Tiger以前の失敗であろうから、単に無視するだけで良い.
- logger.log(Level.CONFIG, "dockIcon not supported.", ex);
-
- } catch (Exception ex) {
- // 実行時の失敗だが、DockIconが設定できないだけなので継続する.
- logger.log(Level.WARNING, "dockIcon failed.", ex);
- }
- }
}
super();
}
+ /**
+ * DockIconを設定する
+ *
+ * @throws Exception 失敗した場合
+ */
public static void setupDockIcon() throws Exception {
Class<?> taskbarCls = Class.forName("java.awt.Taskbar");
Object taskbar = taskbarCls.getMethod("getTaskbar").invoke(null);
Image icon = ImageIO.read(Main.class.getResource("/icons/icon.png"));
setIconImageMethod.invoke(taskbar, icon);
}
- public static void setupScreenMenu(final MainFrame mainFrame) throws Exception {
+
+ /**
+ * スクリーンメニューを設定する
+ *
+ * @param mainFrame メインフレーム
+ * @throws Exception 失敗
+ */
+ public static void setupScreenMenu() throws Exception {
// Java9以降であればOracle実装でスクリーンメニュー類を設定する.
// (jdk5でコンパイルする都合上、無理矢理リフレクション経由のDynamicProxyでハンドラを作っている)