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:

Autor: Thomas Pummer

Thomas Pummer ist Softwareentwickler an der Universität Wien. In seiner Freizeit betreut er das Open Source Projekt TrayRSS und werkt an diversen anderen kleinen Projekten. Er ist sehr interessiert an Open Source und Webentwicklung und testet gern neue Programmiersprachen.

2 Gedanken zu „Plattformunabhängigkeit und java.awt.Desktop“

  1. thank you for this information, so i don’t have to look on installation problems, but focus on an other solution in my source.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*