Mac状态栏项目但不在Dock上

时间:2012-05-19 08:07:57

标签: java macos statusbar dock headless

我正在尝试在Mac上创建一个在状态栏中放置图标的java应用程序,但我不想在Mac基座上放置jar图标(在纸上有咖啡杯的那个)。所以我尝试使用System.setProperty(java.awt.headless,true)技术,但是我不能在SystemTray菜单栏中放任何东西,因为我得到了HeadlessException。如果有人知道如何解决这个问题,我们将不胜感激。

2 个答案:

答案 0 :(得分:4)

很容易......如果你知道怎么样:)

首先将您的jar文件包装在mac应用程序包中

然后进入生成的包的内容并打开info.plist。 只需添加LSUIElement属性并将其设置为1.这将在启动时从Dock中删除应用程序。 另请参阅这里的苹果文档: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调用此命令或编写自己的jni lib。 或者我会有一个xcode项目做一些非常相似的事情 - 在我的github帐户中隐藏菜单栏:https://github.com/kritzikratzi/jAppleMenuBar/ 你只需要更改src / native / jAppleMenuBar.m文件中的一些参数。

答案 1 :(得分:0)

这避免了码头中的任何内容:

//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.");
        }

这会添加托盘图标,如https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html

所示
Comparator