Plattformunabhängigkeit und java.awt.Desktop

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

Ähnliche Artikel: