Java 10 und JavaFX, Oracle Java und OpenJDK

 27. Juli 2018 •  Ekkart •  java, javafx, openjdk, oracle •  ToDo

Es ist manchmal ein Kreuz mit Java.

Zunächst muss man sich unter Linux (wahrscheinlich auch unter Windows, wer weiß), entscheiden, ob man mit Oracle Java oder OpenJDK entwickelt.

Das ist solange kein Unterschied, bis man JavaFX einsetzen will, das XML-basierte GUI-Elemente zur Verfügung stellt. JavaFX ist bei Oracle bei Java 8 und 9 dabei, bei OpenJDK muss man das extra installieren oder sich sein OpenJDK selbst compilieren. Ich will ja eigentlich nur Java programmieren, also Oracle Java genommen (damals Java 8), weil das JavaFX enthält und unter Linux funktioniert.

Als Java 9 rauskam habe ich das erst mal ignoriert, weil es mir von der Sprache her außer Modulen nicht viel bringt und in die wollte ich mich erst einarbeiten, wenn Version 1 meines Programms steht. Außerdem startet Java 9 mit Java 8 compilierte jar-Dateien nicht, ich hätte mich also tatsächlich einarbeiten müssen, unabhängig davon, ob ich Module nutze oder nicht – war mir zu mühselig.

Jetzt ist ein Fehler im Double-Spinner aufgetreten (es wird eine Exception geworfen, wenn ein leerer Text eingegeben wird). Dieser Fehler ist ab Java 9 behoben.

Im Gegensatz zu früher kann man seit Java 9 OpenJDK tatsächlich gleichwertig zu Oracle Java benutzen, da ist Oracle wohl etwas offener geworden. Außerdem soll alle halbe Jahre eine neue Java-Version rauskommen.

Daher habe ich mit Vorfreude OpenJDK 11 installiert (das bis Oktober ein Java 10 installiert – fragt nicht) und sofort gemerkt, dass das Programm nicht kompiliert, weil die JavaFX-Klassen fehlen. Wie jetzt – ich dachte, OpenJDK ist gleichwertig?

Das ist so, dass ab Java 10 sowohl bei Oracle als auch bei OpenJDK JavaFX nicht mehr enthalten ist. Bei beiden Distributionen muss man JavaFX separat installieren. Das soll wohl die Entwicklung separieren und dynamischer gestalten, gerade im Hinblick auf die mit Java 9 eingeführte Modularisierung. Langfristig soll JavaFX auch auch als Maven- oder Gradle-Dependency zur Verfügung stehen.

Steht es aber nicht, ich müsste also entweder ein OpenJDK selbst compilieren (glaubt mir, die Anleitungen sind nicht vertrauenserweckend) oder auf Oracle Java 8 oder 9 zurückgehen. Außerdem ist unklar, ob JavaFX bleibt oder mit Oracles Entscheidung endet. Beides sind realistische Optionen, ich hoffe natürlich langfristig auf eine Dependency.

Konkret werde ich auf Oracle Java 8 zurückgehen, einen üblen Hack für den Spinner-Bug implementieren und Version 1 fertigstellen. Immerhin nutze ich so eine Umgebung, die ich beherrsche.

Dann werde ich mir die Modularisierung ansehen und schauen, inwieweit ich beim dann vorhandenen Java 11 schmerzfrei JavaFX integrieren kann.

Lernzeit dafür: zwei Tage und ein Komplettupdate meines Rechners.

Ich will doch nur programmieren…