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
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
< /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
< /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
[/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
[/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
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]
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
- < li> gilt wie eclipse < /li>
- 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
- 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