Ein erstes “Hello World” von JavaFX mit Maven

https://bildung.social/@oerinformatik/

https://oer-informatik.de/jfx_01_initialisierung_des_projekts

tl/dr; (ca. 6 min Lesezeit): Ein JavaFX-Projekt wird aus einer Vorlage (Maven Artefakt) erstellt und Konfiguriert. Die Konfigurationsdatei pom.xml wrid für JavaFX und JDK17 angepasst, die Startklasse erstellt und die JavaFX-App per IDE (VSCode) und Konsole mit Maven gestartet. Artikel ist Teil eines JavaFX-Tutorials. (Zuletzt geändert am 19.11.2023)

Das Build-System Maven

Software-Projekte nutzen häufig Bibliotheken oder Module, die geladen und eingebunden werden müssen. Beispielsweise wollten wir das Modul JavaFX nutzen, haben dies aber bislang noch gar nicht installiert. Wir können uns jetzt selbst um alle Abhängigkeiten kümmern, diese aus dem Netz laden, einbinden (in einer module-info.java- Datei) usw. oder uns von einem Build-System wie Maven oder Gradle helfen lassen.

In diesem Beispiel werde ich dafür Maven nutzen, dass uns im gesamten Build-Prozess mit Automatisierungen unterstützen wird. (Wer mehr dazu erfahren will, kann z.B. diesen Artikel zum Buildprozess mit Maven lesen.)

Ein neues Maven/Java(FX)-Projekt erzeugen

Um ein JavaFX-Maven Projekt zu erstellen benötigen wir zunächst zwei Dinge: eine Ordnerstruktur, wie Maven sie nutzt und eine Konfigurationsdatei pom.xml.

Maven-Dateistruktur
Maven-Dateistruktur

Beides lassen wir uns aus einer Vorlage (Maven Quickstart) erstellen und passen es dann an unsere Bedürfnisse an. Wir können uns von VSCode helfen lassen (nächster Absatz) oder einfach per Einzeiler ein Maven-Projekt in der Kommandozeile (Bash/Powershell/Terminal) erstellen:

Wem der Weg über die Kommandozeile zu nerdy ist, der kann in VSCode über das installierte Java Extension Pack das folgende Kommando ausführen. Per Tastatur: Strg-Shift-P oder über das Menü Help / Show All Commands:

Menü Help / Show All Commands
Menü Help / Show All Commands

In dem Eingabefeld kann per Dropdown eingegeben oder per Eingabe vorausgewählt werden. Bei Eingabe von “Create Java” erscheint der für uns richtige Punkt “Java: Create Java Project”:

Eingabe “Create Java” sollte das Auswahlmenü “Create”
Eingabe “Create Java” sollte das Auswahlmenü “Create”

Wir lassen uns ein Standard Maven-Projekt erzeugen, daher wähle ich “Maven Create from Archetype”.

Eingabe “Maven Create from Archetype”
Eingabe “Maven Create from Archetype”

Jetzt müssen wir die Vorlage wählen: “Maven Archetype Quickstart” bietet alles, was wir brauchen.

Eingabe “Maven Archetype Quickstart”
Eingabe “Maven Archetype Quickstart”

Bei der folgenden Versionsabfrage wählen wir die aktuellste (momentan “1.4”).

Die GruppenID ist so etwas, wie eine umgekehrte Domäne: sie dient dazu, Pakete und Module zu gliedern und zu finden (kleingeschrieben). Ich wähle immer die Struktur (Land).(Organisation).(Abteilung).(Projekt), also in unserem Fall de.csbme.ifaxx.myfxproject:

GruppenID eingeben: “de.csbme.ifaxx.myfxproject”
GruppenID eingeben: “de.csbme.ifaxx.myfxproject”

Als Name des Softwareprodukts (“Artefakt”) wähle ich “jfxhello” (kleingeschrieben) für ein erstes “Hello World”:

Name des Softwareprodukts eingeben: “jfxhello”
Name des Softwareprodukts eingeben: “jfxhello”

Anschließend muss noch der Speicherort gewählt werden.

Wenn das geschehen ist, geht es im Terminal (unten in VS Code) weiter: Maven beginnt direkt damit, die nötigen Abhängigkeiten zu laden und sich rückzuversichern, dass die erste Programmversion 1.0-SNAPSHOT heißen soll (was Sinn ergibt und mit der Enter-Taste bestätigt werden kann). Anschließend müssen alle Eingaben noch einmal bestätigt werden (mit “Y” oder Return):

Eingaben mit Enter und “Y” bestätigen
Eingaben mit Enter und “Y” bestätigen

Jetzt wird die Zusammenfassung ausgegeben, die Dateien werden unter dem Pfad angelegt und man hat die Möglichkeit, den Ordner direkt zu öffnen (“Open” unten in der rechten Ecke):

Eingaben mit “Y” oder Return bestätigen
Eingaben mit “Y” oder Return bestätigen

Was wurde erzeugt?

Das Buildsystem Maven hat eine Verzeichnisstruktur, Konfigurationsdateien und ein kleines Beispielprogramm mit Test angelegt. Wir wollen uns zunächst zwei Dateien anschauen: die pom.xml und die Startdatei der App, die darin konfiguriert wird:

Inhalt der pom.xml
Inhalt der pom.xml

In der pom.xml werden die Eingaben, die wir im Rahmen der Projektinitialisierung gemacht haben, gespeichert (gelb markiert). Wir können diese dort ändern - und das müssen wir gleich auch, denn einige genannte Abhängigkeiten sind veraltet (rot gekennzeichnet), andere fehlen komplett. Am einfachsten ist es, die pom.xml zu ersetzen mit dem Quelltext unten - mindestens ab dem Punkt <properties>....

Mit diesem Aufbau wird ein Projekt mit Java Version 17 gebaut (<java.version>17</java.version>), dessen Startklasse src/main/java/de/csbme/ifaxx/myfxproject/App.java ist (<mainClass>de.csbme.ifaxx.App</mainClass>). Die nötigen Maven-Compiler-Versionen und aktuellen Anhängigkeiten (openjfx, junit.jupiter) sind ebenso gegeben. Wichtig ist, dass in den Properties die Variablen für java.version und main.class gesetzt werden, da diese unten referenziert werden.

Anpassen der Java-Dateien

In der Vorlage wurden noch zwei Java-Dateien angelegt: App.java und AppTest.java. Das eigentliche Hauptprogramm App.java ist derzeit noch nicht Java-FX-spezifisch und die Testklasse AppTest.java verweist auf eine veraltete Version. Wir passen beide zunächst mit einer einfachen Struktur an, um auszuprobieren, ob das ganze schon lauffähig ist. Im folgenden Artikel werden wir dann den Aufbau und die Funktion genauer betrachten.

Der Startpunkt unserer App ist die Datei src/main/java/de/csbme/ifaxx/myfxproject/App.java. Ohne auf die Inhalte eingehen zu wollen: wir benötigen Imports, müssen einen Vererbungshinweis auf Application ergänzen, benötigen eine start()-Methode und müssen in der main()-Methode launch(args); ergänzen. Im Ganzen muss sie für einen ersten Startversuch den folgenden Inhalt haben:

In der Testklasse src/test/java/de/csbme/ifaxx/myfxproject/AppTest.java können wir ordentlich aufräumen: die Imports auf jUnit sind veraltet, am einfachsten wir löschen erstmal alles, bis auf die Klasse selbst:

Damit sollte die Struktur für einen ersten Test vorhanden sein.

Ausführen des JavaFX-Projekts

Wenn die IDE alles korrekt erkannt hat, sollte links im Menü der Punkt “Maven” auftauchen, der die Unterpunkte “Lifecyle” und “Plugins” hat. Unter Plugins findet sich “javafx” und darin “run”. Damit lässt sich das Programm ausführen.

Inhalt der pom.xml
Inhalt der pom.xml

Falls das nicht klappt, bleibt der Weg über das Terminal (PowerShell/Bash): hier muss Maven der Pfad zur pom.xml-Datei übergeben werden:

In beiden Fällen sollte eine recht nüchterne erste GUI “Hallo” sagen:

Das erste JavaFX-Fenster gibt “Hello” aus
Das erste JavaFX-Fenster gibt “Hello” aus

Damit haben wir schon einmal eine Reaktion des Systems ohne uns im Ansatz mit den Hintergründen beschäftigt zu haben. Im nächsten Schritt untersuchen wir den Aufbau dieser “Hello World” App mit JavaFX.

### Mögliche Fehlermeldungen

Bis hierhin können viele Probleme auftreten, die eigentlich immer dieselbe Ursache haben: Die Java-Version in der pom.xml, im PATH, unter JAVA_HOME, Maven oder der IDE passen nicht zusammen. Dann heißt es: nochmal einen Schritt zurück gehen und die Umgebungsvariablen korrekt einstellen oder den Aufruf zunächst über die PowerShell/Bash versuchen.

Nächste Schritte

Dieser Artikel ist ein Teil der Artikelserie zu einer Energiemonitors mit JavaFX.

Das Projekt ist erstellt, jetzt kommt das unweigerliche Hello World mit JavaFX.


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: Ein erstes "Hello World" von JavaFX mit Maven” von Hannes Stein, Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/jfx_01_initialisierung_des_projekts veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/javafx/javafx-einstieg. Stand: 19.11.2023.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: