在Java中使用10.8通知中心

这只是一个普遍的问题。 我没有实际项目或其他我想做的事情。 是否可以在Java中构建应用程序并添加一些框架内容或其他内容并使用Notication Center?

我写了一个简单的C – > Objective-C shim .dylib,它导出了一个函数showNotification它立即发送了一个通知。

然后我为dylib中导出的函数编写了一个JNA包装器。 我确信你可以使用Rococoa和JNAerator的组合来完全消除这个dylib。

然后我写了一个简单的java应用程序,我变成了一个app bundle 。 这是重点。 如果您的Java应用程序不在应用程序包中,则不会传递通知。

邮件已发送至通知中心。

已发送通知的屏幕截图

这显然是可行的,您只需要遵守NSUserNotificationCenter的规则 – 它必须在应用程序包中

我使用java 7,为此更新了9。 另一个问题似乎取得了更大的成功 。

用于构建这个简单应用程序的代码可以在github上找到 。 它包含一个用于创建.dylib的xcode项目,以及一个利用.dylib传递通知的netbeans项目。

我找到了一个可能对您有用的解决方案,您可以使用Apple script在osx上显示通知,试试这个:

 Runtime.getRuntime().exec(new String[] { "osascript", "-e", "display notification "This is a message" with title "Title" subtitle "Subtitle" sound name "Funk"" }); 

您可以在此处阅读Apple script的通知

一个可能的解决方案是Growl,当应用程序将更新为Growl 2.0时,它会将Growl Notifications转发到Notification Center。

Growl 2的信息

可以使用MoutainGrowl使用当前版本转发Growl消息

Growl可以在Java下使用libgrowl或jgntp

也许它不是最干净的解决方案,它对用户有一些要求,但绝对是有效的

我建议你看看IntelliJ IDEA如何处理MountainLionNotifications和GrowlNotifications中的通知。

正如其他答案中所建议的那样,它使用JNA来操纵NSObject。