Использование Центра уведомлений OS X 10.8 (NSUserNotification) с Java

Я борюсь с центром уведомлений в OS X 10.8. Я написал оболочку для предоставления Java-доступа к классам NSUserNotification и NSUserNotificationCenter через JNA, однако функциональность ограничена. Я могу отправить уведомление, и оно будет отображаться до тех пор, пока .jar запускается из пакета .app через JavaApplicationStub. Однако приведенная ниже строка всегда регистрируется в консоли, когда для стиля уведомлений установлено значение «Оповещения»:

11/29/12 8:37:12.537 PM usernoted[162]: Failed to validate application at (null) -67061

Затем, щелкнув уведомление, в консоль будет записано следующее:

11/29/12 8:38:15.291 PM usernoted[162]: Cannot find originating application to launch for event action.  file://localhost/Users/geoffodonnell/Projects/bin/GuiTest.app/ is not the same app as the one that sent the original notification.

Я предоставил классу NSUserNotificationCenter делегат, однако эти методы запускаются только тогда, когда .jar выполняется вне пакета. Естественно, это противоречит цели, поскольку уведомление никогда не будет отображаться.

Может ли кто-нибудь дать какое-либо представление о двух ошибках выше?

Мне интересно, мешает ли JavaApplicationStub, однако я в неведении, когда дело доходит до того, как именно типичное приложение будет реагировать на события центра уведомлений.


person Geoff    schedule 30.11.2012    source источник
comment
Эта оболочка случайно не с открытым исходным кодом?   -  person Wojtek    schedule 03.04.2021


Ответы (1)


Эта проблема решается путем обновления до JDK 7u10 (предварительная версия для разработчиков), расположенного здесь,

http://jdk7.java.net/download.html

И с помощью инструмента appbundler, описанного здесь,

http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html

для создания пакета приложений. Этот инструмент создает пакет приложения с другим исполняемым файлом-заглушкой, поэтому, возможно, виновником был JavaApplicationStub (и/или JRE 1.6).

person Geoff    schedule 09.12.2012