JavaFX - Neue Hoffnung für Java auf dem Desktop?

Konkurrenz für Flash, AIR und Silverlight? Suns Entwicklungs- und Laufzeitumgebung JavaFX näher beleuchtet.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen
Lesezeit: 8 Min.
Von
  • Dj Walker-Morgan
Inhaltsverzeichnis

Ob im Serverraum oder auf dem Mobiltelefon: Java ist überall. Nur den Desktop, ironischerweise der Einsatzort, für den die Programmiersprache ursprünglich gedacht war, hat Java nie so richtig erobert. Auch die komplette Überarbeitung des GUI-Toolkits mit Swing, die Beschleunigung von Java-Code und neue Verteilungsmechanismen wie WebStart konnten nicht dafür sorgen, dass Java die Bedeutung für den Desktop bekam, die ihre Schöpfer sich vorgestellt hatten.

Im Dezember 2008 gab Sun JavaFX für Windows und Mac OS X in Version 1.0 frei. Linux- und OpenSolaris-Anwender mussten sich bis zum jetzt erschienenen JavaFX 1.2 gedulden.

JavaFX in Suns Entwicklungsumgebung Netbeans

Das JavaFX-Paket besteht aus einer Entwicklungsumgebung (NetBeans 6.5, Bibliotheken und Compiler) und einer Laufzeitumgebung. Beide Komponenten setzen auf bereits vorhandenen Tools aus dem Java-Ökosystem auf. Mit JavaFX Script verfügt die Entwicklungsumgebung über eine eigene Sprache, die jedoch beim Kompilieren nach wie vor Java-Class-Dateien erzeugt. Die JavaFX-Runtime-Engine basiert auf der Java Virtual Machine (JVM) und funktioniert mit den gängigen Browsern. Zahlreiche Verbesserungen machen JavaFX jedoch zu einem Werkzeug von ganz anderem Kaliber als das althergebrachte Java Runtime Environment (JRE).

JavaFX Script, das erstmals unter dem Code-Namen "F3" (Form Follows Function) auftauchte, ist Suns Antwort auf den oft hervorgebrachten Einwand, dass Java eine zu formale Sprache sei. Die neue Sprache ist einfacher als Java, erzeugt aber ebenfalls Java-Class-Dateien und läuft nicht nur in der JVM, sondern kann im Bedarfsfall auch auf Java-Bibliotheken und anderen Code zugreifen. Java-Entwickler verfügen so über eine UI-Sprache, die von der Business-Logik getrennt ist, die sie womöglich schon in Java implementiert haben.

Ein kleines Beispiel soll den Einsatz von JavaFX in der Praxis veranschaulichen:

package hifromheise;

import javafx.scene.*;
import javafx.stage.*;

Stage {
title: "Hi"
scene: Scene {
content: Text {
font: Font {
size: 24
}
x: 10
y: 30
content: "Hi From Heise"
}
}
}

Ein simples JavaFX-Programm

Diese Zeilen deklarieren eine sogenannte Stage (Bühne, Gerüst) für die Anwendung. Die Stage enthält eine Scene, einen virtuellen Schauplatz für die diversen UI-Elemente. Auf der Scene positioniert ist ein Text-Element mit Angaben zur Schriftart, Platzierung und Inhalt. Die Stage ist für die in der Sprache enthaltenen Aktionen und Effekte zuständig.

Die Attribute der grafischen Elemente lassen sich auch mit Hilfe von Variablen steuern. Um im obigen Beispiel den Text in seinem Rahmen auf und ab zu bewegen, benötigt die Stage zunächst zwei Größenangaben

width:250
height:250

nach der Eigenschaft "title".

Die neue Zeile

var ypos=30;

vor der Deklaration der Stage setzt den Anfangswert der vertikalen Position auf 30 Pixel.

y: bind ypos

ersetzt

y: 30

Damit die Änderung bei der Ausführung des Skriptes sichtbar wird, braucht das Beispiel noch den entsprechenden Animationscode, der am Anfang der Datei hinzufügt wird:

import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;

Am Ende sorgt folgender neuer Abschnitt für die Ausführung:

Timeline {
keyFrames: [
KeyFrame {
time: 0s
values: ypos => 25 tween Interpolator.EASEBOTH },
KeyFrame {
time: 2s
values: ypos => 210 tween Interpolator.EASEBOTH },
]
autoReverse: true
repeatCount: Timeline.INDEFINITE
}.play();

Die so erschaffene Animation basiert auf Keyframes. Jedes Keyframe legt den Status der Stage in einem definierten Intervall fest. Beim Start der Bewegung (0s) hat ypos den Wert 25, nach zwei Sekunden 210. "tween Interpolator.EASEBOTH" sagt JavaFX, was in den restlichen 1,99 Sekunden passieren soll. "autoReverse" veranlasst die Rückwärtsbewegung, sobald das letzte Keyframe erreicht ist. "repeatCount" legt fest, wie lange die Aktion laufen soll, in diesem Fall solange, bis das Programm gestoppt wird. ".play" setzt die Animation in Gang.

Das Code-Beispiel demonstriert einige Eigenheiten der neuen Skriptsprache, darunter die Möglichkeit, Zeitdauer als eine Kombination einer Zahl und einer Zeitangabe anzugeben. "1ms" steht dann für eine Millisekunde. Interessant ist auch das Konzept der Bindings, das den Inhalt von Variablen vom Wert anderer Variablen abhängig macht.

var x=10;
var y=20;
var z=bind x+y;

"z" ist hier mit dem Ergebis von "x+y" verknüpft. Sobald sich einer dieser beiden Werte ändert, wird auch der Inhalt von z aktualisiert. Fügt man dem Wort bind ein "lazy" hinzu, wird z jedesmal, wenn die Variable ausgewertet wird, neu berechnet.

Mit der Java-kompatiblen Skriptsprache JavaFX zur Erstellung von interaktiven Benutzeroberflächen hat Sun ein mächtiges Tool für die Werkzeugkiste der Entwickler von Desktop-Software geschaffen. Die Geschichte von Java-Anwendungen auf dem Desktop führte bislang jedoch über diverse Stolpersteine. Die erste Einsatzform waren die berüchtigten Applets. Sie liefen wenig konsistent in den verschiedenen Web-Browsern und machten sich nicht selten als Performance-Bremser negativ bemerkbar. Zudem musste man zunächst das Java Runtime Environment aus dem Internet herunterladen und installieren. Diverse Java-Versionen konnten nebeneinander auf der Festplatte existieren, was es nicht einfach machte, den Durchblick zu behalten. Faktoren wie diese bescherten Java im Browser einen schlechten Ruf, auch wenn viele der Probleme im Laufe der Zeit behoben wurden.

Eine Lösung war zum Beispiel Java Web Start, womit Entwickler Java-Anwendungen für den Desktop erstellen konnten, die sich über das Internet automatisch aktualisierten. Web Start macht Gebrauch von JNLP-Dateien (Java Network Launching Protocol), die Aufruf-Anweisungen für das Programm enthalten. Die lokal installierte Laufzeitumgebung wertet diese aus, lädt die JAR-Dateien der Applikation herunter, erstellt eine Desktop-Verknüpfung und kümmert sich um den Start des Programms.

Viele Änderungen sind in dem im vergangenen Herbst erschienenen Java 6 Update 10 (Java6U10) zusammengeflossen. Die umfangreiche Laufzeitumgebung musste sich einer Schlankheitskur unterziehen und kommt jetzt im modularen Gewand daher. Statt dem kompletten JRE reicht es für Anwender, einen kleinen Java-"Kern" zu installieren, der sich selbständig um das Nachladen zusätzlicher Komponenten kümmert.

Die Grenzen zwischen Applets und Web-Start-Anwendungen sind mit den neueren Java-Versionen fließender geworden. Erstere beherrschen jetzt auch den Umgang mit JNLP-Files, statt nur auf JAR-Dateien zu verweisen. Applets der neueren Generation laufen außerhalb des Browsers in einem eigenen Prozess, sodass sie nicht mehr dessen Geschwindigkeit bremsen. Eine winzige JVM im Browser agiert als Miniserver, während eine separate virtuelle Maschine den eigentlichen Code des Applets ausführt.

Verbesserungen auf beiden Fronten – die einfachere Erstellung von UI-Code und die bequemeren Einsatzmöglichkeiten auf dem Desktop – machen JavaFX zu einer Plattform mit viel Potential. Sun hat seine Entwicklungsumgebung Netbeans 6.5 um einen Editor ergänzt, der JavaFX-Quellcode per Drag & Drop einbindet. Auch hat der Hard- und Software-Hersteller Plug-ins entwickelt, mit denen sich Photoshop- und Illustrator-Inhalte in JavaFX-Code umsetzen lassen, indem sie eine Grafikdatei als JavaFX-Klasse exportieren. Sie machen die Integration von qualitativ hochwertigen grafischen Inhalten um vieles einfacher.

Mit den Production Tools lassen sich Illustrator-Inhalte in JavaFX exportieren

Die neue Version 1.2 erweitert JavaFX unter anderem um anpassbare UI Controls, diverse neue Layout-Klassen, Unterstützung für RSS/Atom-Feeds und ein überarbeitetes Modell für asynchrone Ablaufprozesse. Benchmarks bescheinigen dem neuen Release zudem unter bestimmten Umständen einen erheblichen Geschwindigkeitszuwachs.

Suns Open-Source-Engagement zum Trotz stehen nur der Compiler, Teile der Grafikbibliothek und diverse Tools (darunter die JavaFX-Plug-ins für Photoshop CS3 und Illustrator CS3) unter der GNU General Public License (GPL, Version 2). Die Laufzeitumgebung steht jedoch unter einer proprietären Lizenz, was die Verbreitung der Software erschweren dürfte.

Ist JavaFX ein ernsthafter Konkurrent für Adobes Flash? Nein, denn Flash hat den Desktop schon längst erobert. Suns Angebot könnte sich aber als interessante Alternative zu AIR und Silverlight entwickeln. Die Voraussetzungen stimmen. Entwickler von Rich Content haben auf jeden Fall ein mächtiges neues Tool dazubekommen.

Die ursprüngliche Version dieses Artikels erschien im Dezember 2008 auf heise open UK: (akl)