Ausführbare jar/exe aus JAVAFX Projekt erstellen (IntelliJ)

DerBär

Mitglied
Guten Abend zusammen,

ich versuche aus einem JavaFX Testprojekt (Es handelt sich um ein ganz einfaches Fenster mit Button) eine ausführbare Datei zu machen.
Das Projekt lässt sich über die IntelliJ IDE ganz normal ausführen und kompilieren.

Ich habe daher versucht über IntelliJ ein Jar Archiv was die JavaFX Abhängigkeiten und das eigentliche Prog beinhaltet zu erstellen (Siehe Screenshot für Einstellungen).
Das Jar Archiv wird auch korrekt erstellt, wenn ich es nun aber doppelklicke passiert einfach garnichts. Die Gui welche sich beim direkten Ausführen über IntelliJ öffnet startet einfach nicht.
Wenn ich die Jar datei mittels java -jar (Dateiname) über cmd aufrufe erhalte ich folgenden Hinweis:
Error: Could not find or load main class main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application

Hat da evtl. jemand eine Idee was das Problem ist?
Ich habe auch schon über die offizielle Oracle Seite versucht die Jar Datei direkt per cmd zu erzeugen, blicke da aber leider nicht so ganz durch und würde es sowieso eher lieber direkt in der IDE (IntelliJ) machen, wenn möglich.

Bin über jeden Rat dankbar!
intelliJ.PNGintelliJ.PNG
 

IAmFloppy

Bekanntes Mitglied
fx:deploy funktioniert seit Java 11+ nicht mehr. :(
Mir fällt leider nichts ein, wie man den Fehler umgehen könnte, außer es mal mit Java 8 zu versuchen.
 

DerBär

Mitglied
Hmm also ich habe mir grade mal jdk 10 installiert und kann darüber auch bei den Artifacts JAVAFX Application auswählen und die Jar Datei erzeugen.
Habe damit allerdings das gleiche Problem, wenn ich die erzeugte Jar Datei starten will öffnet sich einfach keine GUI :( .
Habe nochmal einen Screen von den Einstellungen angehangen, fehlt da vlt. noch was?
PS: Wenn ich die .jar über cmd mit java -jar dateiname ausführe erhalte ich nun wieder die Meldung :

Error: Could not find or load main class main
Caused by: java.lang.NoClassDefFoundError: javafx/application/Application
Für mich sieht das fast so aus, als würde er die FX Libs irgendwie nicht finden, kann das sein?

javafxJar.PNG
 

IAmFloppy

Bekanntes Mitglied
Geh mal rechts auf den JavaFX Tab :) Hast du da die Application Klasse drin?
Was kommt denn jetzt wenn du es per cmd starten willst? Der gleiche Fehler?
 

mrBrown

Super-Moderator
Mitarbeiter
Java 10 solltest du direkt wieder runter schmeißen, das ist nicht mehr aktuell. Nimm stattdessen Java 11 (als LTS-Version) oder 12.



Für JavaFX mit Java 11 nutzt man am besten Maven oder Gradle, damit klappt es deutlich besser, als das händisch und mit der IDE zu machen.
Eine "Uber Jar" lässt sich damit aber afaik noch nicht bauen, zumindest nicht auf einfachem Wege, da grätscht das Modul-System dazwischen (falls jemand doch einen Weg kennt, würde ich mich freuen davon zu hören :) ).

Ich beschreib's mal mit Maven:
Statt Uber Jar kann man stattdessen entweder das Assembly-Plugin oder das JavaFX-Plugin mit jlink nutzen, ersteres auch ohne, letzteres nur mit Nutzung des Modul-Systems.
In beiden Fällen fällt am Ende nicht eine einzelne Datei, sondern mehrere Dateien und eine Datei zum starten bei raus, zum Verteilen kann man die dann einfach zippen. Mit Nutzung des Assembly-Plugins sind das nur das Projekt selbst inklusive eingebundener Abhängigkeiten, im anderen Fall kommt ein ganzes JRE mit dabei raus, der Nutzer muss also nicht mal Java installiert haben.

Alle drei Varianten (ohne Modul-System, Modulsystem + Assembly-Plugin und Modulsystem+jlink) findet man kurz als Beispiel in diesem git-Repo: https://gitlab.com/mrBrown/javafx-11-demo (jeweils auf eigenen Branches)
Die Projekte sollte von jeder IDE geöffnet werden können, den Build kann man dann entweder über Kommandozeile oder über die IDE ausführen. Installiert sein müssen JDK 11 oder größer und Maven.
 

DerBär

Mitglied
Geh mal rechts auf den JavaFX Tab :) Hast du da die Application Klasse drin?
Was kommt denn jetzt wenn du es per cmd starten willst? Der gleiche Fehler?

Naja ich habe als Application Klasse einfach meine main Klasse angegeben (siehe Screenshot). Hoffe mal das ist so richtig?
bild3.PNG


@mrBrown
Vielen Dank für die ausführliche Beschreibung.
Ist mir heute etwas spät mich da noch einzulesen, werde es morgen aber direkt mal ausprobieren!
 

DerBär

Mitglied
So da bin ich nochmal.
Der Einstieg in Maven war für mich als Anfänger dann doch schwieriger als gedacht und ich habe mir daher eine kleine Auszeit genommen:).
Bin mittlerweile soweit, dass ich mir mit Maven eine fertige Jar Datei mit allen Dependencies die ich brauche erzeugen kann.
Mein einziges Problem ist momentan allerdings noch, dass ich diese jar nicht per Doppelklick ausführen kann, sondern immer den JavaFX12 Module Path mit java -jar --module-path C:\JavaFX_Librarys\openjfx-12.0.1_windows-x64_bin-sdk\javafx-sdk-12.0.1\lib" mitgeben muss. So startet meine GUI zwar, wenn ich die Modul Parameter per CMD mitgebe, aber schöner wäre es natürlich, wenn das auch einfach per Doppelklick ginge. Ich habe gelesen man könne eine Modul-Info Datei definieren, brauche ich die Parameter dadurch später nicht mehr per CMD angeben? Oder gibt es einen anderen Weg die Jar so anzupassen, dass diese einfach per Doppelklick startet?
 

mrBrown

Super-Moderator
Mitarbeiter
Zeig mal deine pom.xml, und nutzt du das Modul-System oder "umgehst" du das?
Deiner Beschreibung nach baust du eine fat-jar, die JavaFX enthält, nutzt dann zum starten trotzdem das installierte JavaFX-SDK - das passt nur so halb zusammen.


Per doppelklick starbare Fat-Jar geht aktuell afaik nur, wenn man das Modulsystem nicht nutzt (da ansonsten mehrere Module in einer Jar gepackt sind). Man kann das ganze aber per Skript startbar machen.
 

DerBär

Mitglied
Guten Abend, vielen Dank für deine Unterstützung.
Meine POM.xml sowie einen Screenshot meines "Projekts" in Eclipse habe ich mal angefügt.
PS: Mache das ganze zum Testen aktuell in Eclipse, weil ich ein gutes Tutorial gefunden hatte welches das ganze aber in Eclipse gemacht hat (Nur damit es für mich für den Anfang etwas einfacher ist).

Ich glaube was du mit der Fat Jar sagst ist korrekt, in der Jar sind die ganzen FX12 Libs enthalten und genau wie du schreibst ich verstehe eben auch nicht warum ich den Modul Pfad zu meinen lokal installierten FX Libs angeben muss, wenn diese in der Jar enthalten sind, aber ohne Angabe des Modul Pfads kann die Jar halt nicht ausgeführt werden :( .
Screen Project.PNG

Code:
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>maventest</groupId>
  <artifactId>maventest</artifactId>
  <version>1.0.0</version>
  <name>Maven Tutorial</name>
  <description>Descr. of Maven TUT</description>
  <build>
 
    <sourceDirectory>src</sourceDirectory>
    <plugins>
    <!-- COMPILE -->
     <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <release>12</release>
        </configuration>
      </plugin>
      <!-- ASSEMBLY JAR -->
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
            <archive>
                <manifest>
                    <mainClass>maventest.StartMavenTest</mainClass>
                </manifest>
            </archive>
            <descriptorRefs>
                <descriptorRef>jar-with-dependencies</descriptorRef>
            </descriptorRefs>
        </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
      </plugin>
      <plugin>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>0.0.2</version>
    <configuration>
        <mainClass>hellofx/org.openjfx.App</mainClass>
    </configuration>
  
</plugin>
    </plugins>
  </build>
  <!--  REPOSITORIES -->
  <repositories>
  <repository>
  <id>mvnrepository.com</id>
  <url>https://mvnrepository.com/</url>
  </repository>
  </repositories>
  <!-- DEPENDENCY -->
  <dependencies>
 <!-- https://mvnrepository.com/artifact/org.openjfx/javafx -->
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx</artifactId>
    <version>12.0.1</version>
    <type>pom</type>
    <scope>compile</scope>
</dependency>

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>12.0.1</version>
    <scope>compile</scope>
</dependency>
 
  </dependencies>
</project>
 

mrBrown

Super-Moderator
Mitarbeiter
Okay, das Problem ist, dass deine „Main“-Klasse Application erweitert (dann musst du das Modul-System nutzen), aber gleichzeitig eine Fat-Jar baust, mit der das Modulsystem nicht nutzbar ist.


Lösung siehe das Projekt weiter oben, im wesentlich brauchst du eine main-Methode in einer Klasse, die nicht von Application abgeleitet ist.
 

DerBär

Mitglied
Wie geil es funktioniert, dank deiner Hilfe.
Der Tipp mit der main Klasse die die eigentliche Klasse startet war genau das richtige und dank deines Github Projekts auch total einfach nachzubauen, vielen Dank.
Was du zum Modul System schreibst leuchtet mir ehrlich gesagt noch nicht so ganz ein, aber dazu werde ich mich aufjedenfall nochmal schlau machen.
Aufjedenfall erstmal vielen Dank für die Unterstützung die erste Hürde ist schonmal genommen mir war wichtig die Programme auch auf anderen Systemen einfach ohne großen Aufwand ausführen zu können und das ist erstmal geschafft :) .
 
Zuletzt bearbeitet:

JudoRunner1

Neues Mitglied
Hi guys. Hier ist eine Lösung was IntelliJ und fx:deploy etc angeht. Es wird auch gezeigt wie mann jar ohne IntelliJ eksekutiert. Wichtig Manifest File zu korrigieren. Auch Library Setting (Project Structure) ist gezeigt. Oder wichtig ist was Extends Application angeht !!!! ;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
G Einbinden von Bildern in ausführbare Jar-Datei Java Basics - Anfänger-Themen 25
G persistence.xml in ausführbare jar einbinden Java Basics - Anfänger-Themen 11
M Java Mysql ausführbare datei Java Basics - Anfänger-Themen 7
JavaNewbie2.0 eclipse - Als ausführbare Datei speichern Java Basics - Anfänger-Themen 16
I Ausführbare .jar oder .exe Datei erstellen Java Basics - Anfänger-Themen 4
T Ausführbare .jar öffnet nur ein cmd... Java Basics - Anfänger-Themen 2
S Ausführbare Datei erstellen Java Basics - Anfänger-Themen 12
G Problem: Java Projekt als ausführbare Jar Exportieren (Eclipse) Java Basics - Anfänger-Themen 10
K Java Projekt als ausführbare Jar Exportieren (Eclipse) Problem Java Basics - Anfänger-Themen 24
B Standardprogramm für ausführbare jar-Datei Java Basics - Anfänger-Themen 16
S Erste Schritte Ausführbare Jar Datei Java Basics - Anfänger-Themen 19
F Exportieren als ausführbare Jar-Datei unter Ubuntu nicht möglich Java Basics - Anfänger-Themen 17
B Ausführbare jar-Datei Java Basics - Anfänger-Themen 3
M Netbeans ausführbare Jar erzeugen Java Basics - Anfänger-Themen 4
L ausführbare .jar erstellen Probleme Java Basics - Anfänger-Themen 6
S Ausführbare datei erstellen Java Basics - Anfänger-Themen 7
M [Eclipse] Ausführbare Jar-Datei - Eingabeaufforderung Java Basics - Anfänger-Themen 8
D Ausführbare Datei Java Basics - Anfänger-Themen 18
F Ausführbare JAR-Datei: Tastatureingabe in Eingabeaufforderung Java Basics - Anfänger-Themen 6
P Ausführbare Dateien Java Basics - Anfänger-Themen 3
H2SO3- textdatei in ausführbare jar packen Java Basics - Anfänger-Themen 4
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
F Ausführbare Java-Programme erstellen Java Basics - Anfänger-Themen 9
B Wie kann ich eine dauerhaft ausführbare Datei erstellen? Java Basics - Anfänger-Themen 6
W IE Instanz öffnen / Ausführbare Datei öffnen Java Basics - Anfänger-Themen 2
T Ausführbare jar erstellen (Eclipse, SWT) Java Basics - Anfänger-Themen 5
T schon wieder ausführbare .jar-dateien Java Basics - Anfänger-Themen 2
T Wie ausführbare Anwendung erstellen Java Basics - Anfänger-Themen 2
A Ausführbare jar-Datei erstellen (mit Eclipse) - main-class? Java Basics - Anfänger-Themen 4
G ausführbare datei Java Basics - Anfänger-Themen 4
G Wie erstelle ich eine ausführbare ".jar" Datei? Java Basics - Anfänger-Themen 22
L ausführbare datei aus java-projekt? Java Basics - Anfänger-Themen 6
A ausführbare Dateien mit Java erstellen? Java Basics - Anfänger-Themen 4
M Ausführbare Datei Java Basics - Anfänger-Themen 4
T Ausführbare Datei erzeugen Java Basics - Anfänger-Themen 2
Juelin Netbeans mit JavaFX, FXML und Scenebuilder Java Basics - Anfänger-Themen 11
Juelin javaFX mit Elementen Java Basics - Anfänger-Themen 6
Juelin Netbeans und javafx Java Basics - Anfänger-Themen 6
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
A Kapazität JavaFX TextField Java Basics - Anfänger-Themen 4
L JavaFX - grundlegende Verständnisprobleme Java Basics - Anfänger-Themen 1
S JavaFX Java Basics - Anfänger-Themen 1
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
A JavaFX Toggle_Button_Disable Java Basics - Anfänger-Themen 2
ac83 JavaFX - Kompilierungsproblem Java Basics - Anfänger-Themen 1
R Intellij javafx --> jar Java Basics - Anfänger-Themen 11
O Compiler-Fehler JavaFX fmxl LoadExeption Java Basics - Anfänger-Themen 4
M Javafx Timeline Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
A JavaFX-Filechooser Java Basics - Anfänger-Themen 5
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
A JavaFx - SceneBuilder Java Basics - Anfänger-Themen 5
S JavaFX - Objekt an neue Stage übergeben Java Basics - Anfänger-Themen 12
G Javafx Eventhandler zu jedem Node Java Basics - Anfänger-Themen 1
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
T HTMLEditor JavaFX Java Basics - Anfänger-Themen 4
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
R Umsetzungsplan JavaFx App Java Basics - Anfänger-Themen 9
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
P JavaFx einrichten Java Basics - Anfänger-Themen 6
Torsten.E JavaFX mit Visual Studio Code verwenden Java Basics - Anfänger-Themen 1
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Javafx ListView kann nicht gefüllt werden. Java Basics - Anfänger-Themen 6
D JAVAFX WebVIEW zu JSOUP Java Basics - Anfänger-Themen 3
D Folgende Fehlermeldung bei der Installation von JAVAFX Java Basics - Anfänger-Themen 1
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J javafx mediaplayer mit https Java Basics - Anfänger-Themen 3
J JavaFX Label,Button zur Laufzeit Java Basics - Anfänger-Themen 30
O JavaFX XML Versuch Java Basics - Anfänger-Themen 2
O JavaFX Java Basics - Anfänger-Themen 7
M JavaFX-Übung Autospiel Java Basics - Anfänger-Themen 4
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
I Javafx Tabpane Reiter blockieren Java Basics - Anfänger-Themen 1
S JavaFX Beginneraufgabe Java Basics - Anfänger-Themen 1
W JavaFX import Fehler/Zellularautomaten Java Basics - Anfänger-Themen 1
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
CptK mit javafx button erstellen Java Basics - Anfänger-Themen 1
U Javafx Array aus Buttons Java Basics - Anfänger-Themen 2
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
K Erste Schritte JavaFX - wie von "externer" Klasse auf Methoden des Controllers zugreifen Java Basics - Anfänger-Themen 2
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
D JavaFX, Verweis auf Datei im Projekt Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
M JavaFX: Problem mit der TableView Java Basics - Anfänger-Themen 0
P JavaFX ohne FXMLLoader Java Basics - Anfänger-Themen 3
K JavaFX UI controls Java Basics - Anfänger-Themen 1
B Farbverlauf erstellen ohne Javafx, AWT usw.? Java Basics - Anfänger-Themen 34
H Best Practice JavaFX TableView mit Zell-Rahmen anstelle von Zeilen-Balken Java Basics - Anfänger-Themen 1
M Ausgabe eines Arrays auf Label (Javafx) Java Basics - Anfänger-Themen 4
K Threads Multithread in JavaFx Java Basics - Anfänger-Themen 11
R Threads in JavaFX Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben