Unter Gnome gibt es die Möglichkeit Benachrichtigungen für den Nutzer über eine einheitliche Benachrichtigungsinfrastruktur anzuzeigen. Speziell in Ubuntu Jaunty wurden einige Programme, z.B. Pidgin modifiziert um von den Möglichkeiten des „notify“ Frameworks Gebrauch zu machen.
Die „notify“ Implementierung unter Gnome und Ubuntu bietet dabei Benachrichtigungsdienste über das D-Bus Protokoll von freedesktop.org an und stellt diese daher einmal per D-Bus und einmal über die „libnotify“ an.
Möchte man sich diese Dienste zu nutze machen, stehen daher prinzipiell die Wege über D-Bus, libnotify zur Verfügung. Aufgrund der Einfachheitheit kann prinzipiell auch ein Kommandozeilenprogramm aufgerufen werden, dass über libnotify Benachrichtigungen nativ absetzt. Da dies der einfachste Weg ist – und grundsätzlich unabhängig von Java funktioniert – stelle ich dies zunächst vor.
Zuerst gilt es libnotify-bin zu installieren, das Programm ermöglicht nun per notify-send Benachrichtigungen abzusenden:
sudo apt-get install libnotify-bin
Eine kurze Hilfe zu notify-send gibt es per –help:
notify-send --help
Und so kann dann ein Beispielaufruf aussehen:
notify-send "JavaOne 2009" "JavaOne - all screens of your life. (except iPhone currently)"
Um mittels Java Benachrichtigungen zu versenden stehen nun die bereits erwähnten Möglichkeiten über Java D-Bus (funktioniert dann bei KDE und Gnome) oder über die Java-Gnome Bindings zur Verfügung. Diese laufen dann jedoch auch nur unter Gnome.
Da ich die Java D-Bus Bindings nicht kompilieren konnte, und seit dem 2.6. dank Serkan Kaba auch in Java-Gnome die libnotify Notification Bindings enthalten sind, habe ich diese näher betrachtet.
Erst in dem kommenden Release von Gnome-Java werden die neuen libnotify Java Bindings enthalten sein, wer nicht warten möchte, wird per Bazaar einen Checkout von http://research.operationaldynamics.com/bzr/java-gnome/mainline/ vornehmen müssen.
Folgende Abhängigkeiten sollten ggf. erfüllt werden – z.B. per apt-get:
junit libgtk2.0-dev libglade2-dev libgtksourceview2.0-dev libglib-dev
Danach kann man dann auschecken und bauen:
bzr checkout bzr://research.operationaldynamics.com/bzr/java-gnome/mainline
cd mainline/
./configure
make
Und hier war dann bei mir erstmal Schluss. Trotz aller Abhängigkeiten war leider keine Übersetzung möglich. Theoretisch hätte es so weitergehen sollen:
in /tmp finden sich dann die Ergebnisse:
tmp/gtk-4.0.jar
tmp/libgtkjni-4.0.11.so
Ohne lokale Installation lassen sich diese Artefakte bereits nutzen – dafür muss lediglich der Classpath angepasst werden.
Eine mitgelieferte einfache Demo könnte folgendermaßen ausgeführt werden, wenn man sich noch im von Bazaar ausgecheckten Verzeichnis befindet:
make demo
bzw:
javac -classpath tmp/gtk-4.0.jar -d tmp/tests doc/examples/button/ExamplePressMe.java
java -classpath tmp/gtk-4.0.jar:tmp/tests button.ExamplePressMe
Last – but not least – kann auch über JNA https://jna.dev.java.net/ libnotify verwendet werden. JNA bietet ohne den „Umweg“ über JNI die Möglichkeit auf native Bibliotheken zuzugreifen.
Hier gab ich vorerst auf, da ich mir nur eine feste Zeit für das Projekt „notify und Java“ nehmen wollte. JNA ist derzeit für mich der vielversprechendste Ansatz, doch dafür müssen die Java Interfaces zum nativen Code noch erstellt werden. Ein Hilfsmittel dazu ist das noch recht junge „jnaerator“ , doch ließ sich dies aufgrund einiger Bugs zum Testzeitpunkt leider nicht einsetzen.
Und so – finally – die Lösung, die funktioniert: Einfach notify-send aufrufen.
Neue Kommentare