ステータスバーにアイコンを表示するJavaアプリケーションをMacで作成しようとしていますが、Macドック(紙にコーヒーカップがあるもの)にjarアイコンは必要ありません。そこで、System.setProperty(java.awt.headless、true)手法を使用しようとしましたが、HeadlessExceptionが発生したため、SystemTrayメニューバーに何も入力できません。誰かがこれを回避する方法を知っているなら、助けていただければ幸いです。
2 に答える
それは簡単です...あなたが方法を知っていれば:)
まず、jarファイルをMacアプリケーションバンドルにラップします
- Mac開発ツールに付属の「jarbundler」アプリを使用する
- または、-unrelated-jarbundlerantタスクhttp://jarbundler.sourceforge.net/を使用します
次に、生成されたパッケージの内容に移動し、info.plistを開きます。LSUIElementプロパティを追加して1に設定するだけです。これにより、起動時にアプリケーションがドックから削除されます。こちらのアップルドキュメントも参照してください:http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html
完全を期すために:これを行う別の方法もありますが、それははるかに苦痛です。ドックアイコンを動的に表示/非表示にできるcocoaコマンドがあります:SetSystemUIMode(https://developer.apple.com/library/mac/#documentation/Carbon/reference/Dock_Manager/Reference/reference.html) rococoaを使用してこのコマンドを呼び出すか、独自のjnilibを作成してください。あるいは、githubアカウントで非常によく似た-メニューバーを非表示にする-を実行するxcodeプロジェクトがあります:https ://github.com/kritzikratzi/jAppleMenuBar/ src /native/の一部のパラメーターを変更するだけで済みますjAppleMenuBar.mファイル。
これにより、ドック内の何かが回避されます。
System.setProperty("apple.awt.UIElement", "true");
これにより、 https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.htmlに示すように、トレイアイコンが追加されます。
//Check the SystemTray is supported
if (!SystemTray.isSupported()) {
System.out.println("SystemTray is not supported");
return;
}
final PopupMenu popup = new PopupMenu();
final TrayIcon trayIcon =
new TrayIcon(createImage("images/bulb.gif", "tray icon"));
final SystemTray tray = SystemTray.getSystemTray();
// Create a pop-up menu components
MenuItem aboutItem = new MenuItem("About");
CheckboxMenuItem cb1 = new CheckboxMenuItem("Set auto size");
CheckboxMenuItem cb2 = new CheckboxMenuItem("Set tooltip");
Menu displayMenu = new Menu("Display");
MenuItem errorItem = new MenuItem("Error");
MenuItem warningItem = new MenuItem("Warning");
MenuItem infoItem = new MenuItem("Info");
MenuItem noneItem = new MenuItem("None");
MenuItem exitItem = new MenuItem("Exit");
//Add components to pop-up menu
popup.add(aboutItem);
popup.addSeparator();
popup.add(cb1);
popup.add(cb2);
popup.addSeparator();
popup.add(displayMenu);
displayMenu.add(errorItem);
displayMenu.add(warningItem);
displayMenu.add(infoItem);
displayMenu.add(noneItem);
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.out.println("TrayIcon could not be added.");
}