Mac OS中的系统托盘(菜单附加)图标使用Java

我正在使用Java开发桌面应用程序。 我想在系统托盘上放置一个图标(带有上下文菜单)(在Mac Os中称为菜单附加function)。 Java 6支持在Windows和Linux中执行此操作,但它在Mac Os中不起作用。

我已经看到一些应用程序在所有三个操作系统(例如DropBox)中执行我想要的操作,但我不知道它们是否是用Java编写的。

我怎样才能做到这一点?

如果在Java中不可能,是否还有其他跨平台语言可以做到这一点?

谢谢。

AWT / Swing

根据文档 ,OSX 10.5更新1和更新支持TrayIcon

TrayIcons在Mac OS X上使用NSStatusMenus表示,它们显示在标准系统菜单附件的左侧。 TrayIcon的java.awt.Image图稿按照Mac OS X标准的灰度显示,用于菜单附加function。

TrayIcon.displayMessage()提供了一个位于TrayIcon下的小型非modal dialog。 如果按下非modal dialog上的“确定”按钮,则仅触发TrayIcon的ActionListener,而不是使用窗口关闭按钮关闭窗口时触发。

对TrayIcon.displayMessage()的多次调用将关闭先前的消息并仅保留最后一条消息。 如果在调用TrayIcon.displayMessage()时应用程序不在前台,则应用程序会在Dock中弹回其图标。 使用应用程序的图标标记消息窗口,以标识触发通知的应用程序。

诺亚提供了这个样本:

 java.awt.SystemTray.getSystemTray().add(new java.awt.TrayIcon(java.awt.Toolkit.getDefaultToolkit().getImage("foo.png"))); 

请注意,您可能希望在将菜单添加到托盘之前将其附加到该图标。

SWT

根据文档 ,SWT 3.3和更新版本支持OSX上的TrayItem图标。

现在,在状态栏中的OS X上运行时,将显示放置在系统托盘上的图标。 SWT TrayItem

此代码段显示如何创建菜单和图标并将其放入托盘中。

我很难将一个Windows应用程序移植到我的Mac上。 我注意到的一件事是图标是完整的,生动的颜色(不遵循Mac惯例)。 我需要添加一些特定于操作系统的代码来转换自己。 但这是Java早期迭代中依赖DLL的Desktop集成版本的一大进步。