IF Open - InterFace AG

JavaFX

27. August 2013

JavaFX Logo

JavaFX von Oracle ist ein Framework für plattformübergreifende Rich Internet Applikationen unter Windows, Linux und Mac OS X. Mit JavaFX lassen sich sowohl Webapplikationen wie auch Standalone-Anwendungen erstellen. Die Erstellung der Anwendung ist hierbei erst einmal unabhängig von der Entscheidung, welche Art der Anwendung später verwendet werden soll. Der Ausführungstyp lässt sich nämlich über wenige Einstellungen in einer Konfigurationsdatei (der so genannten build.xml)  ändern. Das Programm kann man also mit wenigen Handgriffen entweder als Java Applet, als ausführbares Java-File oder als Java Webstart Projekt konfigurieren.

Java FX bietet mehrere Wege, grafische Oberflächen zu gestalten. Zum einen lassen sich Komponenten direkt mit Java festlegen. Andererseits kann man auch so genannte fxml-Dateien erstellen, um XML-basiert Layouts und Komponenten der grafischen Oberfläche festzulegen. Auch CSS-Dateien können zur Bestimmung des Layouts eingebunden werden.

JavaFX FXML Listing

Diese fxml-Dateien lassen sich darüber hinaus leicht mit dem JavaFX Scene Builder-Tool erstellen oder verändern. Das Werkzeug ermöglicht eine einfache und intuitive Zusammenstellung von JavaFX Inhalten durch Drag and Drop der Komponenten. Oberflächen können dadurch komplett ohne Programmierung erstellt werden. Dadurch bietet JavaFX auch unerfahrenen Nutzern einen schnellen Einstieg und erste Mock-Ups der Oberflächen können innerhalb kürzester Zeit entwickelt werden.

JavaFX Scene Builder

 

Neben Standardkomponenten wie Buttons, Labels und Tabellen bietet JavaFX spezielle, sehr fortgeschrittene Komponenten, so zum Beispiel WebView (javafx.scene.web) und MediaPlayer (javafx.scene.media). Es werden auch verschiedene Effektkomponenten (javafx.animation, javafx.scene.effect) zur Verfügung gestellt, die beispielsweise Übergänge zwischen verschiedenen Ansichten animieren oder Objekte grafisch verändern.

Effekt auf Textobjekt

 

Mit dem MediaPlayer können Multimedia-Dateien abgespielt werden. Es werden jedoch nur zwei Formate unterstützt: mp4 und flv.

Mit der WebView-Komponente lässt sich ein Browserfenster in die Anwendung einbetten. WebView unterstützt im Gegensatz zu manchen anderen einbettbaren Browsern auch JavaScript und Ajax, aber kein Flash. Auch in der WebView-Komponente ist das Eventhandling basierend auf Java möglich. So können z.B. Nutzerinteraktionen mit dem Programm direkt im Javacode behandelt werden – es ist kein Javascript dafür notwendig.

Eine weitere interessante Option bei JavaFX ist das Erstellen von self-contained JavaFX-Anwendungen mithilfe von JavaFX packaging tools. Dadurch lassen sich Standalone-Anwendungen für alle Arten von Betriebssystemen (Windows, Linux, Mac OS X) erzeugen, so dass  keine extra installierte Java-Umgebung notwendig ist.

Ein Nachteil bei dieser Art der Anwendung ist unserer Erfahrung nach jedoch die Performance beim Start. Gerade bei der Erstellung von Programmen, die später von einer CD aus gestartet werden sollen, haben wir die Erfahrung gemacht, dass die Anwendung zu langsam ist (ca. 2min bis Applikationsstart). Die Lesegeschwindigkeit wird stark reduziert, weil die Java-Umgebung immer erst eingelesen wird. Gerade bei vielen Abhängigkeiten zu anderen Bibliotheken sinkt daher die Performance spürbar. Um dieses Problem zu umgehen wäre es sinnvoll, möglichst nur Bibliotheken als Abhängigkeit hinzuzufügen, die auch wirklich verwendet werden. Gerade die JRE-Bibliotheken, die zusätzlich bei der Erstellung der self-contained JavaFX Anwendung eingebunden werden müssen, sind sehr umfangreich. Es ist aber aufgrund der Lizenzpolitik von Oracle leider nicht möglich bestimmte, nicht verwendete Teile dieser Bibliotheken  bei der Erstellung auszuschließen, um den Umfang der Bibliotheken zu verringern.  Wenn man statt der CD jedoch einen USB-Stick verwendet tritt dieses Problem nicht auf (ca. 2sec bis Applikationsstart).

Ingesamt fällt unser Fazit zu JavaFX daher eher positiv aus. Vor allem die einfache Bedienung und leichte Erstellung der Oberflächen sowie die Fülle an verfügbaren Komponenten machen das Arbeiten mit JavaFX sehr angenehm. Auch das self-contained Packaging ist abgesehen von den oben genannten Nachteilen sehr hilfreich beim Erstellen von Anwendungen. Deshalb werden wir gerade bei Standalone Anwendungen weiterhin mit JavaFX arbeiten und freuen uns schon auf die angekündigten Updates von JavaFX.

Neben der Verbesserung der bereits vorhandenen Komponenten sollen in Zukunft 3D Grafik, Sensor, sowie Print und Rich Text Unterstützung ermöglicht werden. Mit der nächsten Java Version, also Java 8,  wird JavaFX auch direkt Teil der JRE/JDK sein (zum Teil schon in Java 7). Ab diesem Zeitpunkt soll JavaFX auch für Android und iOS nutzbar sein.