JavaFX JAR unter Windows ausführen schlägt fehl?

MiMa

Top Contributor
Seit ich IntelliJ benutze ist das Programmieren mit JavaFX einfacher für mich geworden. Mit JavaFX stehe ich noch so ziemlich am Anfang da ich durch meine Erkrankung viele Monate nicht programmieren konnte.
Ich mein erstes JavaFX Programm geschrieben welches ich als JAR Datei auf einem Windows System ausführen möchte und dann mit Log4J in eine exe umwandeln möchte.
In IntelliJ ist das alles kein Problem das Programm wird ordnungsgemäß ausgeführt aber mit dem ausführen der JAR Datei und der Konvertierung in eine exe ist scheinbar für mich ein unlösbares Problem aufgetaucht.

Auf meinem System habe ich Java Version 20.0.2 installiert und openjfx javafx-sdk-20.0.1.
In der Umgebungsvariable habe ich Java JX wie folgt konfiguriert.
Java:
Name der Variablen: PATH_TO_FX
Wert der Variablen: C:\Program Files (x86)\Java\javafx-sdk-20.0.1

Wenn ich versuche die JAR Datei zu starten Blitzt es kurz. Ich denke das Fenster wird gestartet und schnell wieder geschlossen.
In der Konsolenausgabe erhalte ich folgende Meldung
Code:
C:\Users\Michael>java -jar D:\Programmierung\JavaMethodenExtraktor\out\artifacts\JavaMethodenExtraktor_jar\JavaMethodenExtraktor.jar
Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen

Ich habe habe auf dem System die gleichen Java komponennten installiert die ich auch bei IntelliJ verwendet habe.

Über Hilfe würde ich mich sehr freuen.

Vielen Dank
 
und dann mit Log4J in eine exe umwandeln möchte.
Log4J ist eine Library zum loggen - damit wirst Du keine exe hin bekommen. Meinst Du launch4j?

Und bezüglich der Fehlermeldung gibt es zwei Optionen:
a) es fehlen auf dem System die Komponenten bzw. diese werden nicht gefunden
b) Je nach Startweise kann es einfach sein, dass die main Methode in einer Klasse ist, die von einer JavaFX Klasse erbt (Application ist das meist.) Dann kann es zu der Problematik kommen. Da ist ein möglicher Workaround eine zusätzliche Klasse Main mit einer mein Methode, welche dann einfach nur die main Methode in der Klasse, die von Application erbt, aufruft.

Wenn ich Dich richtig verstanden habe, dann gibst Du etwas weiter, dass die Installation von JavaFX und ggf. das Setzen von Umgebungsvariablen voraus setzt. Das halte ich für kritisch. Auch ganz ohne diese Installationen kannst Du JavaFX auch in einem fat jar unterbringen um es dann weiter zu geben (benötigt dann aber zwingend den Workaround aus Punkt b!)

Aber ich wiederhole mich - der Weg, den Oracle hier für Weitergaben vorsieht, ist der Weg über jpackage (oder GraalVM, aber das nur kurz der Vollständigkeit halber. Das kannst Du getrost sofort vergessen.).
 
Ja stimmt, sorry ich meinte launch4j.

In diesem Projekt gibt es nur eine Klasse und ich habe die in IntelliJ auch als Startklasse ausgewählt.
Ich habe das Java FX von der Gluon herunter geladen und in das Verzeichnis Java entpackt.
Ich wüsste nicht wie man sonst dem System sagen soll, das JavaFX dort ist?
Warum FX Komponenten fehlen sollte ist mir auch nicht klar?

Wie installiert man denn sonst das openjfx damit Windows es erkennt?
 
Die einzelnen Möglichkeiten finden sich unter https://openjfx.io/openjfx-docs/. Die Variante mit der Installation ist aber der schlechteste.

Es kann ausreichen, einfach die jar Dateien einzubinden. Diese kannst Du z.B. von mvnrepository herunter laden. Dabei aber aufpassen: Die eigentliche Library ist nur ein leeres Dummy. Die eigentliche Implementation ist immer mit der Architektur / Betriebssystem.

Also z.B. bei javafx-base findest Du unter: https://mvnrepository.com/artifact/org.openjfx/javafx-base/20.0.2
bei den Links ein view all:
(Ich habe da mal die aktuelle 20er Version genommen)
Und da wäre das -win.jar das jar File für 64Bit Windows. Das-win-x86.jar wäre das 32Bit Windows jar und so weiter ...

Wenn Du eine Projektverwaltung wie Maven verwendest, dann gibst Du so Abhängigkeiten einfach nur an.

In diesem Projekt gibt es nur eine Klasse und ich habe die in IntelliJ auch als Startklasse ausgewählt.
Wie gesagt: Da wäre dann eine zweite Klasse (z.B. Main) notwendig, die dann die Startklasse ist und die in der main Methode dann die main Methode dieser vorhandenen Klasse aufruft.

Wie installiert man denn sonst das openjfx damit Windows es erkennt?
Da noch einmal ganz deutlich die Antwort: gar nicht! Du musst da nichts installieren / konfigurieren.
 
Mein Programm ist ein IntelliJ Projekt welches auf Basis von JavaFX erstellt wurde. Ich habe noch die Haken bei GIT und Maven inkludiert und bei JavaFX die Controls. Das Projekt läuft innerhalb von IntelliJ sehr gut, da habe ich keine Probleme. Das Problem taucht auf wenn ich das JAR unter Windows ausführen oder mit launch4j eine exe erstellen möchte. Da wird bemängelt das die JavaFX Runtines fehlen?
Ich verstehe sowieso nicht, warum das mit IntelliJ super funktioniert und unter Windows rein gar nicht?
Ich könnte mir das ausführen eines JARs unter Windows ersparen, wenn ich innerhalb von IntelliJ eine exe erzeugen könnte, wo JavaFX funktioniert?
Dann sollte es bestimmt unter Windows funktionieren!?!
Um das JAR ausführen zu können musste ich noch unter Windows das JRE installieren, was aber kein Problem war.
Ich werde die FX Umgebungsvariablen wieder entfernen und auch das JRE denn ohne JavaFX GUI nutzt das ja nichts.
 
Also wenn Du ein Maven Projekt hast, dann ist es relativ einfach, da direkt per JPackage auch das fertige Image mit exe Datei zu bekommen. Da ist dann auch alles drin, was man zum Ausführen braucht, so dass auf dem Zielsystem nicht einmal ein Java installiert sein muss. Hatte ich Dir sowas nicht in der Vergangenheit schon einmal gegeben? Wenn Du möchtest, dann ich Dir diesen Aspekt direkt in deine pom.xml einbauen. Dazu kannst Du Dich einfach per Email einmal an mich wenden.
 

Neue Themen


Zurück
Oben