Da ich zur Zeit an einem kleinen Open Source Projekt werke, TrayRSS, teste ich verschiedenste Sachen im Bezug auf die Anforderungen die sich mir durch die gewünschte Funktionalität des Projekts stellen. Unter anderem möchet ich dabei einen Eintrag eines RSS Feeds im Standardbrowser des Systems öffnen.
import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
public class OpenBrowser {
public static void main(String[] args){
URI uri;
try {
uri = new URI("http://god.sprossenwanne.at");
Desktop.getDesktop ().browse (uri);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Damit wird über die API java.awt.Desktop auf den Standardbrowser zugegriffen, doch leider nicht mit dem gewünschten Erfolg:
WindowsXP:
erfolgreich
Max OS:
noch nicht getestet
Arch Linux Gnome:
erfolgreich
Arch Linux KDE4:
Exception in thread "main" java.lang.UnsupportedOperationException: Desktop API is not supported on the current platform
at java.awt.Desktop.getDesktop(Desktop.java:126)
at OpenBrowser.main(OpenBrowser.java:14)
Kanotix KDE3:
java.io.IOException: Failed to show URI:http://god.sprossenwanne.at
at sun.awt.X11.XDesktopPeer.launch(XDesktopPeer.java:75)
at sun.awt.X11.XDesktopPeer.browse(XDesktopPeer.java:64)
at java.awt.Desktop.browse(Desktop.java:368)
at OpenBrowser.main(OpenBrowser.java:14)
Also eher suboptimal die Sache. Plattformunabhängigkeit ist auf [1] wie folgt definiert
Plattformunabhängigkeit ist die Eigenschaft eines Programms, auf verschiedenen Computersystemen mit Unterschieden in Architektur, Prozessor, Compiler, Betriebssystem und weiteren Dienstprogrammen, die zur Übersetzung oder Ausführung notwendig sind, lauffähig zu sein. Der Grad der Plattformunabhängigkeit wird als Portabilität bezeichnet (vom englischen „portability“). Dabei versteht man darunter nicht nur die bestehende Plattformunabhängigkeit, sondern auch den eingeschätzten Arbeitsaufwand, der benötigt würde, um das Programm in ein vollständig plattformunabhängiges umzuwandeln. Dieser Vorgang wird Portierung genannt.
Plattformunabhängig ist Java somit eigentlich, da ich aber überall individuelle Fehler bekommen hab ist der Grad der Portabilität wohl eher gering, zumindest in dem Fall.
————-
Update vom 17.05.2009:
Die Plattformunabhängigkeit und der Unterschied zwischen Gnome und KDE4 ist eine Interessante Sache.
So siehts z.B. unter KDE4 aus
openjdk 6
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-6-openjdk/jre/lib/i386/xawt/libmawt.so
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1666)
at java.lang.Runtime.load0(Runtime.java:787)
at java.lang.System.load(System.java:1022)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1767)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1684)
at java.lang.Runtime.loadLibrary0(Runtime.java:840)
at java.lang.System.loadLibrary(System.java:1047)
at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:67)
at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:47)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.loadLibraries(Toolkit.java:1614)
at java.awt.Toolkit.(Toolkit.java:1636)
at java.awt.Desktop.isDesktopSupported(Desktop.java:169)
at java.awt.Desktop.getDesktop(Desktop.java:143)
at OpenBrowser.main(OpenBrowser.java:14)
sun-java-6
Exception in thread "main" java.lang.UnsupportedOperationException: Desktop API is not supported on the current platform
at java.awt.Desktop.getDesktop(Desktop.java:126)
at OpenBrowser.main(OpenBrowser.java:1
[1] http://de.wikipedia.org/wiki/Plattformunabh%C3%A4ngigkeit
Schreibe einen Kommentar