Fel: JavaFX-exekveringskomponenter saknas, och de krävs för att kunna köra den här applikationen

Permalänk

Fel: JavaFX-exekveringskomponenter saknas, och de krävs för att kunna köra den här applikationen

Hej!

Jag tänkte dra igång ett litet JavaFX projekt för att skapa en applikation i Java som har grafiskt stöd i JavaFX.

Det jag har installerat är följande:
* OpenJDK 11 (kompilatorn)
* Scenebuilder 11 (GUI verktyg)
* Eclipse 2019-03 (IDE)
* Maven (Java pakethanteringssystem)

Men ändå får jag detta felmeddelande. Notera att texten är röd i min promt. Inte all text, men text som markeras med Fel: är det.

Fel: JavaFX-exekveringskomponenter saknas, och de krävs för att kunna köra den här applikationen

När jag kör denna klass

import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.AnchorPane; import javafx.stage.Stage; public class Main extends Application { /* * This method launch the JavaFX */ public static void main(String[] args) { launch(args); } /* * This load up the first stage */ @Override public void start(Stage primaryStage) throws Exception { FXMLLoader loader = new FXMLLoader(); loader.setLocation(Main.class.getResource("/JAdaptiveMPC/src/main/resources/se/controller/gui.fxml")); AnchorPane layout = loader.load(); // Show the scene containing the root layout. Scene scene = new Scene(layout); primaryStage.setScene(scene); primaryStage.show(); } }

Så vad kan vara fel?
Maven har ju sett till så jag har stöd för JavaFX.

Här är min pom.xml fil från Maven

<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>Control</groupId> <artifactId>JAdaptiveMPC</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx</artifactId> <version>13-ea+5</version> <type>pom</type> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-base</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-graphics</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-swing</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-web</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-media</artifactId> <version>13-ea+5</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>13-ea+5</version> </dependency> </dependencies> </project>

Permalänk
Medlem
Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk

Japp.

Jag har importerat in mina Maven bibliotek, men jag kan fortfarande inte komplimera koden.

Permalänk
Medlem
Skrivet av heretic16:

Japp.

Jag har importerat in mina Maven bibliotek, men jag kan fortfarande inte komplimera koden.

Fast din Main ärver ju fortfarande från Application, vilket svaret på SO uttryckligen säger är orsaken till problemet.
Skapa en ny Main som inte ärver från Application och sätt den som din mainClass

<mainClass>application.NewMain</mainClass>

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Skrivet av noMad17:

Fast din Main ärver ju fortfarande från Application, vilket svaret på SO uttryckligen säger är orsaken till problemet.
Skapa en ny Main som inte ärver från Application och sätt den som din mainClass

<mainClass>application.NewMain</mainClass>

Men jag måste ärva klassen Application. Annars går det inte.

Kanske man ska köra "Maven build" och "Maven install"? Jag använder bara Maven för att få ned .jar filerna.

Permalänk
Hedersmedlem
Skrivet av heretic16:

Men jag måste ärva klassen Application. Annars går det inte.

Kanske man ska köra "Maven build" och "Maven install"? Jag använder bara Maven för att få ned .jar filerna.

Men vad händer om du gör som inlägget på SO föreslår?

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
NAS: 6700K/16GB/Debian+ZFS | Backup (offsite): 9600K/16GB/Debian+ZFS

Permalänk
Medlem
Skrivet av heretic16:

Men jag måste ärva klassen Application. Annars går det inte.

Kanske man ska köra "Maven build" och "Maven install"? Jag använder bara Maven för att få ned .jar filerna.

Jag börjar misstänka att du faktiskt inte läser det som står i länken.
Du ska ha kvar den Main som ärver Application, men du ska skapa en ny Main-klass som inte ärver Application som sedan anropar Main.main i sin main-metod.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Skrivet av Thomas:

Men vad händer om du gör som inlägget på SO föreslår?

Jag har inte försökt, men jag vet att det är inte rätt metod. Den där José Perada är inte dirket den bästa på att beskriva lösningar på problem. Oftast halvgjorda och han själv har även andra lösningar som är dessutom bättre.

Denna lösning känns nästan farlig för jag rör inte pom.xml filen manuellt. Jag använder riktiga verktyg för att slippa manuellt ändra.
Helst skulle jag vilja bara att man behöver bara importera sina bibliotek via Maven och sedan ska man mest bara klicka på "Kör" och då ska allt fungera.

Men att "flytta", "klistra" och "ändra" manuellt gillar jag inte. Det måste finnas någon annan lösning på detta problem?

Jag har inte OpenJFX installerat. Min tanke är att jag ska slippa detta igenom att använda Maven.

Permalänk
Skrivet av noMad17:

Jag börjar misstänka att du faktiskt inte läser det som står i länken.
Du ska ha kvar den Main som ärver Application, men du ska skapa en ny Main-klass som inte ärver Application som sedan anropar Main.main i sin main-metod.

Så här blev resultatet

Fel: kunde inte hitta eller ladda huvudklassen org.codehaus.plexus.languages.java.jpms.CmdModuleNameExtractor Orsakades av: java.lang.ClassNotFoundException: org.codehaus.plexus.languages.java.jpms.CmdModuleNameExtractor

Ska jag ladda upp mitt projekt? Om någon här har Eclipse IDE med Java så behöver ni bara importera. Det är ett enkelt "Hello World" projekt.

Permalänk

Nu hittade jag svaret.

Allt ska importeras via JavaFX 11 SDK, inte Maven. JavaFX 11 SDK hittar man hos GluonHQ.
Där efter så ska man addera denna i "Run Configurations" i VM hos Eclipse.

--module-path /vägen/till/din/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml

Permalänk
Medlem

Förstår om OP inte längre har något intresse av tråden, men med tanke på att tråden dök upp i min googling så kan jag lämna lite mer information för den som stöter på problemet i framtiden.

Problemet beror antagligen på att man använder Java 9 eller nyare, som har stöd för moduler.
OP:s lösning fungerar, men det innebär att man inte använder Maven. Att ladda ner och installera en SDK samt ställa in VM-options är kanske inte så jobbigt att göra en gång, men det blir jobbigare ju fler utvecklare man är.

Det går att konfigurerar sina moduler i en fil i projektet istället. Den här guiden går igenom båda lösningarna:
https://edencoding.com/runtime-components-error/