Hier wird dokumentiert, wie man OpenJDK und JavaFX zum laufen bringt, als IDE nutze ich Eclipse.
Zuerst laden wir uns mal alles runter.
- OpenJDK 11 (den Installer, setzt schon ein paar Umgebungsvariablen)
- JavaFX 11
- Scene Builder (Frameworks implementieren, weiter unten)
OpenJDK
Als erstes installieren wir mal die OpenJDK, bei der Installation drauf achten, das ihr den Punkt „JAVA_HOME-Variablen“ aktiviert, wenn das gemacht ist, setzen wir noch die restlichen Umgebungsvariablen.
Dazu gehen wir bei Winows in die „Systemsteuerung -> System -> Erweiterte Systemeinstellungen -> das Tab „Erweitert“ -> der Button „Umgebungsvariablen“
Die erste Variable sollte durch die Installation schon vorhanden sein
Als nächstes suchen wir in der Tabelle „Systemvariablen“ die Variable „Path“ und klicken auf bearbeiten. Im neuen Fester klicken wir auf „neu“ und schreiben „%JAVA_HOME%“ rein.
Danach suchen wir in der Tabelle „Benutzervariablen“ die Variable „Path“ und klicken auf bearbeiten. Im neuen Fester fügen wir die Variable „%JAVA_HOME%“ und “ %JAVA_HOME%\bin“ ein.
JavaFX
Das Zip-Archiv habe ich entpackt und den Ordner „javafx-sdk-11.0.2“ nach „C:\Program Files\Java\java-11\“ verschoben. Die Ordner „Java“ und „Java-11“ habe ich selbst angelegt.
Eclipse einrichten
Bevor es los geht, müssen wir in Eclipse noch ein paar einstellungen machen.
Als erstes legen wir uns eine „User Libraries“ für JavaFX an. Dazu gehen wir in Eclipse auf „Window -> Preferences -> Java -> Build Path -> User Libraries“, dann den Button „New…“, in das Textfeld geben wir ein Namen unserer Wahl ein, wie z.B. „JavaFX-11“ und bestätigen das ganze, danach in der Liste den angelegen Punkt auswählen und den Button „Add External JARs…“ klicken, dann zum Ordner „C:\Program Files\Java\java-11\javafx-sdk-11.0.2\lib“ navigieren und alle Datein, bis auf die Zip-Datei auswählen und bestätigen.
Fertig
Jetzt testen wir das Ganze, dazu legen wir ein Neues „JavaFX Projekt“ an und Adden die angelegte „User Library“, Rechts-Klick auf den Projekt-Namen -> Preferences -> Java Build Path -> markieren in der Liste „Modulepath“ -> klicken den Button „Add Library…“ -> Doppel-Klick auf „User Library“ -> markieren unsere „JavaFX-11“ und klicken „Finish“
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
VBox root = new VBox();
Scene scene = new Scene(root,400,400);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}Code-Sprache: JavaScript (javascript)
Jetzt Starten wir das Programm. In manchen Fällen kann es wohl passieren, das es eine Fehlermeldung gibt, das war auch bei mir so.
Fehler: Hauptklasse app.Main konnte nicht gefunden oder geladen werden
Ursache: java.lang.NoClassDefFoundError: javafx/application/ApplicationCode-Sprache: HTTP (http)
In dem Fall müssen wir der VM noch Argumente übergeben. In Eclipse auf Run -> Run Configurations… -> im Fenster das Tab „(x)= Arguments“ wählen -> in das TextArea „VM arguments“ folgendes eintragen:
--module-path "C:\Program Files\Java\java-11\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxmlCode-Sprache: JavaScript (javascript)
Natürlich mit angepassten Pfad, je nachdem wo das JavaFX zu finden ist
Frameworks & User Libraries
Wenn man Frameworks oder User Libraries nutzen will, sollte man am besten das “ Java Platform Module System ( JPMS )“, oder wie die Sterblichen es nennen „Java 9-Module“, verwenden. Andernfals müsste man sonst alle Frameworks und User Libraries, mit Hilfe der „VM Arguments“ adden, das macht nicht sehr viel Spass und brauch wieder etwas mehr Zeit.
Ich nutze ganz gerne die Frameworks:
- ControlsFX
- JFoeniX (Java 9 Version laden, sollte aufwärts-kompatible sein)
- FontAwesomeFX
Also implementieren wir mal das „Java 9-Module“, Rechts-Klick auf das Projekt -> Configure -> Create module-info.java
In der „module-info.java“ sollte es so ausssehen:
module OpenJDK_Test {
exports app; // das package der Main-Klasse
requires javafx.base;
requires javafx.fxml;
requires javafx.graphics;
}Code-Sprache: JavaScript (javascript)
Jetzt legen wir die User Libraries für die Frameworks an und fügen sie dem Projekt hinzu, das machen wir genauso, wie wir es mit dem JavaFX gemacht haben.
Dann müssen wir die benötigten Klassen noch in die „module-info.java“ eintragen, das sieht dann so aus:
module OpenJDK_Test {
exports app;
requires javafx.base;
requires javafx.fxml;
requires javafx.graphics;
requires com.jfoenix;
requires org.controlsfx.controls;
requires de.jensd.fx.fontawesomefx.commons;
requires de.jensd.fx.fontawesomefx.materialdesignicons;
// requires de.jensd.fx.fontawesomefx.fontawesome;
// requires de.jensd.fx.fontawesomefx.materialdesignicons;
// requires de.jensd.fx.fontawesomefx.materialicons;
}Code-Sprache: JavaScript (javascript)
Bei FontAwesomeFX 11 gibt es aktuell noch ein Problem, so das man leider nur eine der Klassen nutzen kann, sonst gibt es folgende Exception:
Error occurred during initialization of boot layer
java.lang.LayerInstantiationException: Package license in both module de.jensd.fx.fontawesomefx.materialdesignicons and module de.jensd.fx.fontawesomefx.fontawesomeCode-Sprache: CSS (css)
Für das FontAwesomeFX 11 müssen wir noch ein „–add-opens“ in die „VM Arguments“ schreiben, das sollte dann so aussehen:
--module-path "C:\Program Files\Java\java-11\javafx-sdk-11.0.2\lib" --add-modules=javafx.controls,javafx.fxml
--add-opens javafx.graphics/javafx.css=de.jensd.fx.fontawesomefx.commonsCode-Sprache: JavaScript (javascript)
Scene Bulider
Jetzt binden wir noch die Frameworks oder Libraries beim Scene Builder ein.
Dazu öffnen wir den Scene Bulider -> oben links steht der Punkt „Library“ mit einem Textfeld für die Suche und neben dem Textfeld ist ein Zahnrad, da klicken wir drauf -> JAR/FXML Manager -> Add Library/FXML from file system -> dann den Speicherort der Library suchen -> Öffnen -> Import Components
Ich habe folgende Frameworks und Libraries eingebunden:
- ControlsFX
- JFoeniX (Java 9 Version laden, sollte aufwärts-kompatible sein)
- FontAwesomeFX
So, das sollte es gewesen sein, dann wünsche ich viel Spass.









