Die Javafx-Anwendung funktioniert nicht als laufbarJava

Java-Forum
Anonymous
 Die Javafx-Anwendung funktioniert nicht als laufbar

Post by Anonymous »

Ich möchte Javafx -Entwicklung lernen, aber zuerst muss sichergestellt werden, dass die Anwendung exportiert und selbst ausgeführt werden kann, damit sie in Zukunft mit regulären Benutzern geteilt werden kann - vorzugsweise Linux und Apple, aber Windows (mein Betriebssystem ) Nur ist auch in Ordnung. CommandPrompt (mit Ausnahme der Liste der Befehle, die die IDES verwenden). Beim exportieren der Anwendung aus Eclipse als laufbares Glas und verdoppelt den .Jar passiert entweder nichts, oder es kommt zu einer "Java -Ausnahme hat RIP" -Fehler auftritt. Die einzige Möglichkeit, die Anwendung erfolgreich auszuführen, sind nicht sehr endgültig und sehen nicht so sauber aus, um wie alltägliche Apps zu laufen, was das Ziel ist. < /P>
Ich benutze in erster Linie Eclipse, aber auch intellij, um das Problem einzugrenzen. . > [*] Umgebungsvariablen < /li>
Java SDK -Ordner < /li>
< /ul>
< /li>
Erstellen der Projekte < /p>
  • Eclipse, modular und nicht modular < /li>
    Intellij < /li>
    < /ul >
    < /li>
    Ausführen der Projekt Nicht modular < /p>

    In iDE (funktioniert) < /p>
    < /li>
    In CommandPrompt, kurze/einfache Befehle (funktioniert nicht)
  • In CommandPrompt, verwirrender Befehl, das von Eclipse (Works)
    < /li>
    < /ul>
    < /li>
    Intellij < /p>

    (Das gleiche wie Eclipse) < /li>
    < /ul>
    < /li>
    < /> < /li>
    Exportieren /Bereitstellen der Projekte < /p>

    Eclipse < /p>
    < /li>
    intellij
[*] Ausführen der exportierten/bereitgestellten Projekte
In commandPrompt (funktioniert) < /p>
< /li>
In commandPrompt (zeigt anzeigt (zeigt Der .jar -Fehler) < /p>
< /li>
< /ul>
< /li>
Hergestellt von Intellij

Verwenden Sie App.bat -Datei (funktioniert) < /p>
< /li>
app.zip in app.jar und Laufen mit Java -Plattform SE (funktioniert nicht) < /p>
< /li>
< /> < /li>
< /ul>
< /li>
< /ul>
Vorbereitung < /h2>

Verwenden von Java 8. Heruntergeladen von java.com. Obwohl Java --version In CommandPrompt Java SE Runtime Environment erstellt 23.0.1+11-39
Umgebungsvariablen

"java_home" = "C: \ Programme \ java \ jdk-23" < /li>
"path_to_fx" = "C: \ Programme Dateien \ Java \ javafx-sdk-23.0.1 \ lib "< /li>
" path "=" c: \ Programme \ java \ jdk-23 \ bin "< /li>
[/list]
Java -Ordner

Code: Select all

Java.
├───javafx-sdk-23.0.1
│   ├───bin
│   ├───legal
│   └───lib
├───jdk-23
│   ├───bin
│   ├───conf
│   ├───include
│   ├───jmods
│   ├───legal
│   └───lib
├───jre1.8.0_431
│   ├───bin
│   ├───legal
│   └───lib
├───latest
│   └───jre-1.8
│       ├───bin
│       ├───legal
│       └───lib
└───openjfx-23.0.1_windows-x64_bin-jmods
└───javafx-jmods-23.0.1
< /code>
 Erstellen der Projekte < /h2>

 Eclipse - Nicht modular < /h3>
[list]
  Datei> Neu> Andere> Javafx-Projekt < /p>
< /li>
  Geben Sie einen Namen> "Standard JRE '...  "> Auswählen" Modul-info.java-Datei erstellen "oder erstellt sie trotzdem> FISSE < /P>
< /li>
  Löschen Sie das" Modul- info.java "Datei> RightClick-Projektordner> Ausführen als> Konfigurationen ausführen> Argumente> In" VM Argumente "eingeben-Module-path"%path_to_fx%"--add-modules javafx.controls, javafx.fxml 
(% Path_to_fx% verwendet die Umgebungsvariable)> anwenden < /p>
< /li>

RightClick -Projektordner> Build -Pfad> Build -Pfad konfigurieren> Entfernen "Javafx SDK" ( Es handelt sich um die falsche Javafx -Bibliothek)> Bibliothek hinzufügen> Benutzerbibliothek> Wählen Sie die heruntergeladene Javafx -Bibliothek aus (meine lautet "Javafx 23.0.1")> Bewerben> Bewerben und Schließen < /p>
< /li>
< /ol>
Verzeichnisbaum für nicht modulare < /p>

Code: Select all

non_modular_test:.
│   .classpath
│   .project
│   build.fxbuild
│
├───.settings
│       org.eclipse.core.resources.prefs
│
├───bin
│   └───application
│           application.css
│           Main.class
│
└───src
└───application
application.css
Main.java
< /code>
 Main.java Code < /p>
package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
launch(args);
}
}
< /code>
 eclipse - modular < /h3>

  Gleich wie Schritt 1-2 für nicht modular < /p>
 < /li>
  Gleich wie Schritt 4 für nicht modulare < /p>
< /li>
< /ol>
Verzeichnisbaum für modulare < /p>
modular_test:.
│   .classpath
│   .project
│   build.fxbuild
│
├───.settings
│       org.eclipse.core.resources.prefs
│
├───bin
│   │   module-info.class
│   │
│   └───application
│           application.css
│           Main.class
│
└───src
│   module-info.java
│
└───application
application.css
Main.class
Main.java
< /code>
 Main.java Code < /p>
Same as non modular
IntelliJ

(home screen) New Project > JavaFX > Give a name > Just go with Maven > Select JDK > Next

[*]Select the libraries you want included (just for making the app run, i dont use any) >  Create

[/list]
Directory tree for IntelliJ
demo:.
│   .gitignore
│   mvnw
│   mvnw.cmd
│   pom.xml
│
├───.idea
│       .gitignore
│       compiler.xml
│       encodings.xml
│       jarRepositories.xml
│       misc.xml
│       workspace.xml
│
├───.mvn
│   └───wrapper
│           maven-wrapper.jar
│           maven-wrapper.properties
│
├───src
│   └───main
│       ├───java
│       │   │   module-info.java
│       │   │
│       │   └───com
│       │       └───example
│       │           └───demo
│       │                   HelloApplication.java
│       │                   HelloController.java
│       │
│       └───resources
│           └───com
│               └───example
│                   └───demo
│                           hello-view.fxml
│
└───target
├───classes
│   │   module-info.class
│   │
│   └───com
│       └───example
│           └───demo
│                   hello-view.fxml
│                   HelloApplication.class
│                   HelloController.class
│
└───generated-sources
└───annotations
< /code>
HelloApplication.java Code < /p>
package com.example.demo;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

public class HelloApplication extends Application {
@Override
public void start(Stage stage) throws IOException {
FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {
launch();
}
}
< /code>
 Ausführen der Projekte - nicht exportiert < /h1>

 [b] Eclipse < /strong> < /h3>
[list]
[*]  Nicht modular und modular - in ide < /p>
[list]
  RightClick -Projektordner> Ausführen als> Java -Anwendung < /p>
< /li>
  Wählen Sie die Haupt -Java -Datei> OK < /p>
< /li>
  läuft ohne Schweiß < /p>
< /li>
< /ol>
< /li>
  Nicht modular - in commandPrompt. Kurz-/einfache Befehle

  Navigieren Sie in Befehlsprompt mit CD -Path \ to \ Datei 
zum Haupt -Java -Datei -Ordner der Hauptdatei.
< /li>
Typ Javac-Module-path "%path_to_fx%" --add-modules javafx.controls, javafx.fxml main.java < /code> < /code> < /p>
< /li>
Typ Java-Module-PADH "%path_to_fx%" --add-modules javafx.controls, javafx.fxml main < /code> < /p>
< /li>
Fehler erhalten: Fehler: Fehler oder laden Sie die Hauptklasse, die keine Hauptklasse finden oder laden konnte. /Main)

[*] nvm try Java main.java (funktioniert mit Standard -Java -Code, wenn nur JRE verwendet wird Bibliothek) < /p>
< /li>
Neuer Fehler erhalten: (kurz gehalten) < /p>

Code: Select all

Main.java:3: error: package javafx.application does not exist
import javafx.application.Application;
^
Main.java:4: error: package javafx.stage does not exist
import javafx.stage.Stage;
^
< /code>
< /li>
< /ol>

 Ein weiterer Fehler beim direkten Auftreten von Java (Modules Bla Bla) main.java < /Code>, aber es gibt bereits genügend Details < /li>
< /ul>
< /li>
  Nicht modular - in commandPrompt. Verwirrender Befehl von Eclipse < /p>

  Geben Sie den folgenden Befehl ein: < /p>
(Alles in 1 Befehl .  /p>
"C:\Program Files\Java\jdk-23\bin\javaw.exe"
--module-path "%PATH_TO_FX%"
--add-modules javafx.controls,javafx.fxml
-p "C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx-swt.jar"
-classpath "C:\Users\[user]\eclipse-workspace\non_modular_test\bin" application.Main
< /code>
< /li>
  App läuft (yay) < /p>
< /li>
< /ol>
< /li>
  Modular - in commandPrompt. Kurz- /einfache Befehle < /p>

 Wie nicht modular < /li>
< /ol>

< li> (außer Java (Module bla bla) main.java 
Fehler ist unterschiedlich. Noch bereits genügend Details)
[/list]

[*] Modular - in commandPrompt. Verwirrender Befehl von Eclipse < /p>

Tun Sie dasselbe wie nicht modulare, aber winzige Änderungen: < /p>

Code: Select all

"C:\Program Files\Java\jdk-23\bin\javaw.exe"
-p "C:\Users\[user]\eclipse-workspace\modular_test\bin;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.base.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.controls.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.fxml.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.graphics.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.media.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.swing.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx.web.jar;C:\Program Files\Java\javafx-sdk-23.0.1\lib\javafx-swt.jar"
-m modular_test/application.Main
[*] App läuft

[/list]

< /ul>
Intellij < /h3>
  • In iDE < /p>
    < ol>
    Drücken Sie die Taste der Laufzeit < /p>
    < /li>
    Es wird < /p>
    < /li ausgeführt >
    < /ol>
    < /li>
    In commandPrompt, Short /Simple -Befehle < /p>
    • < li> gilt wie eclipse < /li>
      < /ol>
      < /li>
      In CommandPrompt, verwirrender Befehl, das von Intellij < /p>

      Geben Sie den folgenden Befehl in commandPrompt ein: < /p>
      (Wieder alles in 1 Befehl. Mehrere Zeilen hier zur Lesbarkeit) < /p>
      (Intellij verwendet auch einige UTF-8-Befehle, die nicht ausführen müssen) < /p>

      Code: Select all

      "C:\Program Files\Java\jdk-23\bin\java.exe"
      "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.3.1.1\lib\idea_rt.jar=52330:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2024.3.1.1\bin"
      -classpath "C:\Users\[user]\.m2\repository\org\openjfx\javafx-controls\17.0.6\javafx-controls-17.0.6.jar;C:\Users\[user]\.m2\repository\org\openjfx\javafx-graphics\17.0.6\javafx-graphics-17.0.6.jar;C:\Users\[user]\.m2\repository\org\openjfx\javafx-base\17.0.6\javafx-base-17.0.6.jar;C:\Users\[user]\.m2\repository\org\openjfx\javafx-fxml\17.0.6\javafx-fxml-17.0.6.jar"
      -p "C:\Users\[user]\.m2\repository\org\openjfx\javafx-controls\17.0.6\javafx-controls-17.0.6-win.jar;C:\Users\[user]\.m2\repository\org\openjfx\javafx-fxml\17.0.6\javafx-fxml-17.0.6-win.jar;C:\Users\[user]\IdeaProjects\demo2\target\classes;C:\Users\[user]\.m2\repository\org\openjfx\javafx-graphics\17.0.6\javafx-graphics-17.0.6-win.jar;C:\Users\[user]\.m2\repository\org\openjfx\javafx-base\17.0.6\javafx-base-17.0.6-win.jar"
      -m com.example.demo2/com.example.demo2.HelloApplication
      
    • App läuft
    < /ul>
    Exportieren /Bereitstellen der Projekte < /h1>

    Eclipse < /h3>
    • Rechtsklick -Projektordner oder klicken Projekt auswählen> Exportziel auswählen (as .jar - Durchsuchen Sie die Schaltfläche Mit .ZIP ASWELL)> Wählen Sie entweder extrahieren oder paket (sie sind unterschiedlich, wie später gezeigt)> FINISS

      < /ol>
      Als nicht modular ist eine Warnung über dem Exportmenü mit der Aufschrift: "VM -Argumente werden nicht Teil des Runnable -Glass sein. Argumente können weitergegeben werden Die Befehlszeile beim Starten des Glass ", obwohl diese Warnung praktisch keine Rolle spielt (siehe Kapitel über das Ausführen der Exporte) < /p>

      Modular und nicht modular , extrahierte Bibliotheken [/b]
    Baum (verkürzt)

    Code: Select all

    extract:.
    ├───application
    │   ├───application.css
    │   └───Main.class
    ├───com
    │   └───sun
    ├───javafx
    │   ├───animation
    │   ├───application
    │   ├───beans
    │   ├───collections
    │   ├───concurrent
    │   ├───css
    │   ├───embed
    │   ├───event
    │   ├───fxml
    │   ├───geometry
    │   ├───print
    │   ├───scene
    │   ├───stage
    │   └───util
    └───META-INF
    └───substrate
    └───config
    < /code>
    Manifest.mf
    Manifest-Version: 1.0
    Main-Class: application.Main
    Class-Path: .
    < /code>
    [list]
    [*]  Modulare und nicht modulare, verpackte Bibliotheken < /strong> < /li>
    < /ul>
    Baum (wenig verkürzt). Non-Modular hat kein Modul-info.class < /p>
    modular_package:.
    │   javafx-swt.jar
    │   javafx.base.jar
    │   javafx.controls.jar
    │   javafx.fxml.jar
    │   javafx.graphics.jar
    │   javafx.media.jar
    │   javafx.swing.jar
    │   javafx.web.jar
    │   module-info.class
    │
    ├───application
    │       application.css
    │       Main.class
    │
    ├───META-INF
    │       MANIFEST.MF
    │
    └───org
    └───eclipse
    < /code>
     Manifest.mf
    Manifest-Version: 1.0
    Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
    Rsrc-Class-Path: ./ javafx.base.jar javafx.controls.jar javafx.fxml.jar
    javafx.graphics.jar javafx.media.jar javafx.swing.jar javafx.web.jar ja
    vafx-swt.jar
    Rsrc-Main-Class: application.Main
    Class-Path: .
    < /code>
     Intellij < /h3>
    
      Kann Artefakte für .jar -Verpackungen nicht verwenden, cuz ist nur für JDK 8 < /p>
    < /li>
      Verpackung mit JLink < /p>
    
      DoubleClick Strg < /p < /p >
    < /li>
      Für Maven, ein mvn javafx eingeben: jLink < /code> < /p>
    < /li>
      Der Export ist der Ordner "Ziel" im Projekt 
    
    [/list]
    
    [/list]
    Baum (verkürzt. Theres auch einen "app.zip", identisch mit App -Ordner, zeigt aber nicht im Baum an) < /p>
    target:.
    ├───app
    │   ├───bin
    │   │   ├───app (file)
    │   │   ├───app.bat
    │   │   ├───java.dll
    │   │   ├───java.exe
    │   │   ├───javaw.exe
    │   │   └───server
    │   │       └───jvm.dll
    │   ├───conf
    │   │   └───security
    │   │       └───policy
    │   │           ├───limited
    │   │           └───unlimited
    │   ├───legal
    │   │   ├───java.base
    │   │   ├───java.datatransfer
    │   │   ├───java.desktop
    │   │   ├───java.prefs
    │   │   ├───java.scripting
    │   │   ├───java.xml
    │   │   └───jdk.unsupported
    │   └───lib
    │       └───security
    ├───classes
    │   └───com
    │       └───example
    │           └───demo
    ├───generated-sources
    │   └───annotations
    └───maven-status
    └───maven-compiler-plugin
    └───compile
    └───default-compile
    < /code>
    app.bat
    @echo off
    set JLINK_VM_OPTIONS=
    set DIR=%~dp0
    "%DIR%\java" %JLINK_VM_OPTIONS% -m com.example.demo/com.example.demo.HelloApplication %*
    < /code>
     Ausführen der exportierten /bereitgestellten Projekte < /h1>
    
     Mit Eclipse < /h3>
    [list] hergestellt
    [*]  Rechtsklickend und Laufen mit Java (TM) Plattform SE. Modular und nicht modular ist das gleiche < /p>
    
      Extrahierte Bibliotheken: Java -Ausnahmefehler Popup < /p>
    < /li>
      Verpackte Bibliotheken: Nichts passiert < /p>
    < /li>
    < /ul>
    < /li>
      Ausführen in commandprompt (funktioniert für alle) < /p>
    
      Navigieren Sie zum Desktop -Ordner < /p>
    < /li>
    < li>  Java-Module-path "%path_to_fx%eingeben" --add-modules javafx.controls, javafx.fxml -jar app.jar 
  • Es läuft fein < /p>
    < /li>
    < /ol>

    Nur Problem ist Dieser BefehlStrompt muss geöffnet bleiben oder die Anwendung schließt damit < /li>
    < /ul>
    < /li>
    In commandPrompt ausführen (Fehler, warum .jar funktioniert nicht). Modular und nicht modular ist immer noch gleich

    Navigieren Sie zum Desktop -Ordner> Java -Jar App.jar < Br /> < /li>
    Extrahierte Bibliotheken: < /p>

    Code: Select all

    Error: JavaFX runtime components are missing, and are required to run this application
    < /code>
    < /li>
      Packaged Libraries: (Nur das unbenannte Modul ist unterschiedlich - Auch der Fehler wird verkürzt) < /p>
    [date of running] com.sun.javafx.application.PlatformImpl startup
    
    WARNING: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @[hexcode]'
    
    Graphics Device initialization failed for :  d3d, sw
    
    Error initializing QuantumRenderer: no suitable pipeline found
    
    java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    
    Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    
    Exception in thread "main" java.lang.reflect.InvocationTargetException
    
    Caused by: java.lang.RuntimeException: No toolkit found
    
Hergestellt mit Intellij
  • Durch app.bat -Datei < /p>

    Navigieren Sie zur App.bat -Datei navigieren im Ordner "bin" < /p>
    < /li>
    DoubleClick Die Datei < /p>
    < /li>
    commandPrompt wird geöffnet, und die App wird fein ausgeführt. Dieser BefehlStrompt muss geöffnet bleiben, oder die Anwendung schließt damit < /p>
    < /li>
    rechts die Datei "App" und wird mit der Java -Plattform SE geöffnet, wird kurz geöffnet. CommandPrompt und nichts mehr passiert < /p>
    < /li>
    < /ul>
    < /li>
    Ordner "app.zip" ändern , zu "app.jar" und laufend < /p>

    rechts den Ordner> mit> Java -Plattform SE < /p>
    < /öffnen li>
    Fehler erhalten: "Ungültig oder beschädigtes Jarfile :(" < /p>
    < /li>
    < /ol>

    Gleiches Ergebnis, wenn Java -jar app.jar in commandPrompt

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post