Open Source im professionellen Einsatz
Linux-Magazin 07/2009
© DeVIce, Fotolia.com

© DeVIce, Fotolia.com

Rich Internet Applications mit Java FX

Spezialeffekt

Browserapplikationen mit dem Komfort lokaler Programme sind der neueste Schrei. Um mit dem Eyecandy von Adobes Flash/Flex und Microsofts Silverlight oder Novells Moonlight mitzuhalten, greift Sun in die Trickkiste und wirft die neue Websprache Java FX in den Ring. Kann sie Entwickler erleuchten?

938

Anwendungen im Browser sind umstritten bei Anwendern und Entwicklern. Erstere wünschen sich vor allem Benutzerkomfort durch schnelle Reaktionszeiten oder Features wie Drag&Drop und Tastaturkürzel, Letztere verweisen auf die Grenzen der Client-Server-Kommunikation und versuchen mit massivem Javascript-Einsatz den Benutzungskomfort zu heben.

Lokal ablaufende Rich Clients haben da mehr Möglichkeiten. Um beide Welten zu verbinden, hat Sun bereits mit der Einführung von Java die Applets vorgestellt, doch lange Startzeiten und Inkompatibilitäten der verschiedenen Browser - gerade Microsoft war nie als großer Java-Fan bekannt - verdarben ihren Ruf. Ajax-Anwendungen, die unmittelbar im Browser nur mit Hilfe von Javascript und CSS arbeiten, sind zwar populär, viele Webentwickler misstrauen jedoch ihrer Skalierbarkeit und Interoperabilität.

Aus diesem Grund wollen die Rich Internet Applications (RIA) das Erbe der Java-Applets antreten. So nennen sich Anwendungen, die benutzerfreundliche Oberflächen und lokale Berechnungen mit der praktischen Verteilung über das Web kombinieren. Dazu benötigen sie gemeinhin ein Plugin.

Diesen Markt besetzt gegenwärtig Platzhirsch Adobe mit Flash. Die Anfangs als Spielkram für Designer abgetane Websprache hat inzwischen viel dazugelernt und bildet die Grundlage für den RIA-Aufsatz Flex [1]. Anwendungen wie Youtube oder Adobe Connect sind dank der Verbreitung auf rund 90 Prozent der Webbrowser plattformübergreifend nutzbar, bei Linux-Anwendern schwindet der Anteil aus unterschiedlichen Überlegungen und je nach Statistik auf etwa 87 Prozent ([2], [3]).

Sun versucht Comeback

Adobe bietet Entwicklern einen gefüllten Werkzeugkasten sowie gute Medienunterstützung für Musik und Filme. Vor allem aber kommt es mit einer schlanken Laufzeitumgebung aus. Wem Flash zu proprietär ist oder wer sich über zögerliche Unterstützung von 64-Bit-Architekturen ärgert, der schaut sich die freie Alternative Gnash an [4]. Microsoft Silverlight ist ein Newcomer im RIA-Markt [5] und muss sich seinen Anteil noch erarbeiten, denn erst rund 20 Prozent der Browser haben sein Plugin installiert - bei Linux noch deutlich weniger. Es basiert auf dem hauseigenen Dotnet-Framework, eine Linux-Portierung entsteht im Mono-Projekt unter dem Namen Moonlight [6].

Antiautoritäre Sprache

Im Laufe einer Dekade haben sich Internet-Bandbreite und die Rechenleistung deutlich erhöht. Dies und der erkleckliche Anteil von gut 80 Prozent aller Browser mag Suns Wunsch beflügelt haben, wieder bei den RIAs mitzuspielen. So kündigte das Unternehmen im Mai 2007 mit Java FX [7] eine neue Sprache an - ein Wortspiel mit den im Filmgeschäft üblichen Special Effects (SFX). Sie ist eine eigenständige Sprache für RIAs, nicht nur noch eine weitere Java-Bibliothek. Java FX fußt zwar technisch auf Java und benötigt ein JRE, hat jedoch auch Einflüsse aus den Skriptsprachen Javascript, Tcl und dem Grafikformat Scalable Vector Graphics (SVG).

Listing 1 demonstriert Gemeinsamkeiten mit Java wie auch neue Sprachkonstrukte: Das Paket »beispiel« definiert die Klasse »Uhrzeit«. Fremde Klassen importiert der Entwickler wie in Java, er darf sogar Klassen aus dem JDK wie »java.text.DateFormat« verwenden (Zeile 4). Die Sprache definiert Variablen und deren Typen anders als Java: Die neuen Schlüsselwörter »var« und »def« legen normale und konstante Variablen fest. Entwickler dürfen den Typ einer Variablen angeben, müssen es aber nicht. Die Variable »stunden« ab Zeile 11 bekommt den Typ »Integer«, bei »minuten« überlässt es der Entwickler dem Compiler, den Typ zu bestimmen.

Listing 1:
»Uhrzeit.fx«

01 package beispiel;
02 
03 import java.lang.System;
04 import java.text.DateFormat;
05 import java.text.SimpleDateFormat;
06 import javafx.animation.KeyFrame;
07 import javafx.animation.Timeline;
08 import javafx.lang.Duration;
09 
10 public class Uhrzeit {
11    public var stunden: Integer;
12    public var minuten;
13    public var sekunden = 0;
14    public var titel = ""; // <- über bind in Listing 2 verwendet
15    def INTERVAL: Duration = 1s;
16    def TITEL_FORMAT = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
17 
18    function tick () {
19         def einfach = 'mit einfachen Hochkommata';
20         def doppelt = "mit doppelten Hochkommata";
21         var mehrereZeilen = 'eine langer Text kann jetzt '
22                             "über mehrere Zeilen definiert werden";
23         var mitVariablen  = "mit Var '{einfach}'.";
24 
25         System.out.println("Ausgabe {mitVariablen}");
26         System.out.println("Buchstaben in mehrereZeilen="
27                            "{mehrereZeilen.length()}.");
28         // Normale Java-Klasse verwenden:
29         var now  = new java.util.Date();
30         sekunden = now.getSeconds();
31         minuten  = now.getMinutes();
32         stunden  = now.getHours() ;
33         titel    = TITEL_FORMAT.format(now);
34 
35         System.out.println("{stunden}:{minuten}:{sekunden}");
36     }
37 
38     // Konstruktor
39     init {
40         // Instanz von KeyFrame erzeugen:
41         var aktion = KeyFrame {
42                         time: INTERVAL,
43                         canSkip: true,
44                         // Funktionsreferenz:
45                         action: function() { tick(); }
46                      }
47         // Instanz von Timeline erzeugen ...
48         var zeitleiste = Timeline {
49                 repeatCount: Timeline.INDEFINITE
50                 keyFrames: [ aktion ] }
51         // ... und starten:
52         zeitleiste.play();
53     }
54 }

Sun hat das Typensystem kräftig aufgeräumt: Es gibt nur noch die Basistypen »String«, »Integer«, »Number«, »Boolean« und »Duration« für eine Zeitdauer. Die Methode »tick()« ab Zeile 18 zeigt, dass sich Stringkonstanten nun flexibler angeben lassen: Der Entwickler darf sowohl einfache (»'«) als auch doppelte (»"«) Hochkommata verwenden und die Strings über mehrere Zeilen verteilen. Wie bei einigen Skriptsprachen üblich, ersetzt Java FX in geschweiften Klammern stehende Variablen bei der Zuweisung. Die Methode »tick()« gibt daher aus:

Ausgabe mit Var 'mit einfachen Hochkommata'.
Buchstaben in mehrereZeilen=64.
21:53.0:38

Während die Sprache normale Java-Objekte wie bei »TITEL_FORMAT« in Zeile 16 nach wie vor per »new« erzeugt, gibt es für echte Java-FX-Klassen eine neue Syntax: Die einem Konstruktor ähnliche Funktion »init« ab Zeile 39 erzeugt so eine Instanz von »KeyFrame«. Java FX erlaubt es, unmittelbar beim Erzeugen des neuen Objekts den Instanzenvariablen »time« und »canSkip« Werte zuzuweisen. Die Variable »action« erhält mit »function() {tick();}« eine Referenz auf die weiter oben vereinbarte Methode. Die Klasse »KeyFrame« definiert Aktionen, die das Programm während einer Animation so ausführen soll, wie es der Entwickler über das Attribut »repeatCount« festlegt. Im Beispiel aktualisiert das Objekt die Uhrzeit im String »title«, indem sie die Methode »tick()« aufruft.

Abbildung 1: Java FX setzt skalierbare Oberflächen mit Farbverläufen, Spiegelungen und Schatten mittels Scenegraph gut in Szene.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Sorgen um die Java-Zukunft

    Nachdem im Herbst letzten Jahres zuerst eine ganze Reihe Java-Evangelisten und dann auch der Vice President for Development bei Oracle, Cameron Purdy, ihren Hut nehmen mussten, leben nun die Sorgen um die Java-Zukunft wieder auf, weil sich die Anzeichen mehren, dass auch JavaFX keine große Zukunft mehr bei Oracle hat.

  • Netbeans IDE in Version 8.0

    Die dual lizenzierte Netbeans IDE richtet sich vorwiegend an Java-Entwickler, unterstützt aber auch andere Programmiersprachen und ist nun in Version 8.0 erschienen.

  • Netbeans 6.8 RC2 - Support für Java EE 6

    Sun hat den zweiten Release Candidate der Entwicklungsumgebung Netbeans 6.8 freigegeben.

  • Here comes the sun

    Während der Konkurrent Eclipse das Licht öffentlicher Aufmerksamkeit genießt, muss sich die Java-Entwicklungsumgebung Netbeans mit der Strahlkraft des Namens Sun begnügen. Was zählt, ist das Ergebnis.

  • Oracle macht Schluss mit Ruby on Rails in Netbeans

    Die Netbeans-Entwickler sollen sich in Zukunft wieder auf ihr Kerngeschäft konzentrieren.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.