Java FX Problem mit Ubuntu 18 und JavaFx

Bitte aktiviere JavaScript!
Hallo zusammen,

ich brauch mal wieder euren Rat.

Meine Umgebung:
- Ubuntu Mate (siehe Screenshot "Linux").
- IntelliJ IDEA
- OpenJDK 11.0.2 (siehe Screenshot "Java").

Mein Problem:
Ich will mit JavaFX eine Benutzeroberfläche darstellen. Auf meinem Windows Rechner hat das ganze ohne Problem funktioniert. Vor der neuinstallation von Ubuntu, hat es auch hier funktioniert. Jetzt leider nicht mehr.

Ich bekomme folgende Fehlermeldung beim compilieren des Projektes in IntelliJ:
/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED -Djava.library.path=/home/janik/Downloads/javafx-sdk-11.0.2/lib -javaagent:/opt/idea-IC-191.6707.61/lib/idea_rt.jar=39353:/opt/idea-IC-191.6707.61/bin -Dfile.encoding=UTF-8 -classpath /home/janik/IdeaProjects/FireSubscriber/target/classes:/root/.m2/repository/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.0.2/org.eclipse.paho.client.mqttv3-1.0.2.jar:/root/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar:/root/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar:/root/.m2/repository/com/miglayout/miglayout/3.7.4/miglayout-3.7.4.jar:/root/.m2/repository/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/src.zip:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx-swt.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.web.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.base.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.fxml.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.media.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.swing.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.controls.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.graphics.jar -p /home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.base.jar:/home/janik/Downloads/javafx-sdk-11.0.2/lib/javafx.graphics.jar GUI.Main
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x2a0b1b6c) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x2a0b1b6c
at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
at GUI.Main.start(Main.java:26)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
... 1 more
Exception running application GUI.Main

Process finished with exit code 1

Dazu hab ich bis jetzt folgendes als Lösung probiert:
- Ich habe dem ganzen Projekt sowie dem JavaFX-JDK volle Rechte gegeben
- Ich habe einmal alles was mit Java zu tun hat gelöscht und neu installiert mit sudo apt install openjdk-8-jdk openjfx
- Ich habe wieder alles gelöscht was mit Java zu tun hat, hab sudo apt install openjdk-11-jdk installiert und über maven die depencies
Code:
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11</version>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>11</version>
</dependency>
hinzugefügt

Aktueller Stand:
- Ich habe die dependencies auskommentiert und von der JavaFX Seite javafx-sdk-11.0.2 heruntergeladen und in mein Projekt importiert. (Das hat mich dann wieder zu der oben stehenden Fehlermeldung gebracht). Installiert ist aktuel OpenJDK 11.

Bin auch gerne Bereit auf OpenJDK 8 zu gehen, brauch nicht zwigend die 11er Version.

Jetzt bin ich leider etwas radlos was ich noch tun könnte?
Da ihr mir letztens schon helfen konntet, wollt ich einfach nochmal nachfragen, vielleicht kennt jemand die Lösung und könnte mir helfen.:)
 

Anhänge

A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Afaik müsste das mit --add-modules javafx.fxml oder einem --add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED als zusätzliches Argument möglich sein.

Du kannst auch die JavaFX-Version mal hochziehen auf 11.0.2, wenn möglich auch direkt auf 12.0.1
 
Afaik müsste das mit --add-modules javafx.fxml oder einem --add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED als zusätzliches Argument möglich sein.

Du kannst auch die JavaFX-Version mal hochziehen auf 11.0.2, wenn möglich auch direkt auf 12.0.1
Danke für deine Antwort.
Ich geh davon aus, dass ich die Parameter unter VM Options eintragen muss.
Das kommt bei den jeweiligen Paramter raus:
--add-modules javafx.fxml
Error occurred during initialization of boot layer java lang.module.FindException: Module javafx.fxml not found
--add-exports=javafx.graphics/com.sun.javafx.util=ALL-UNNAMED
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalAccessError: class javafx.fxml.FXMLLoader$ValueElement (in unnamed module @0x6bbdeef7) cannot access class com.sun.javafx.reflect.ReflectUtil (in module javafx.base) because module javafx.base does not export com.sun.javafx.reflect to unnamed module @0x6bbdeef7
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:935)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:980)
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:227)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:752)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2722)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3237)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
at GUI.Main.start(Main.java:26)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
... 1 more
Exception running application GUI.Main

Process finished with exit code 1

Aktuell ist die JavaFX-Verson 11.0.2 installiert.

Gibts vielleicht eine möglichkeit javafx sauber mit Maven einzubinden?
Ich hab das ja schon über die dependencies probiert, allerdings ohne Erfolg.
 
@Lyreex versuchst du deine Applikation über eine IntelliJ-Runtime-Config zu starten? Das habe ich bei mir mit meinem migrierten Projekt auch irgendwie nie hinbekommen. Dagegen hat es mit einem exec-Goal mit Maven geklappt:

https://github.com/bgmf/poc/blob/master/simple-tests-fx/pom.xml

HTML:
<project>

    <!-- ... -->
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>eu.dzim.tests.fx.${main.class}</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Mit z.B. compile exec:java -Dmain.class=MainTableTest starte ich es dann.

Hinweis: Was bei mir auch noch auf der ToDo-Liste steht: Maven-Wrapper...
 
Danke @dzim für deine Antwort.

Ich hab die Plugins in meine Pom.xml importiert.
Gab leider als Ergebnis immer noch die gleiche Fehlermeldung.

Dann habe ich deinen Maven Code probiert, dort bekomme ich einen neuen Fehler.
/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Dmaven.multiModuleProjectDirectory=/home/janik/IdeaProjects/FireSubscriber -Dmaven.home=/opt/idea-IC-191.6707.61/plugins/maven/lib/maven3 -Dclassworlds.conf=/opt/idea-IC-191.6707.61/plugins/maven/lib/maven3/bin/m2.conf -javaagent:/opt/idea-IC-191.6707.61/lib/idea_rt.jar=42179:/opt/idea-IC-191.6707.61/bin -Dfile.encoding=UTF-8 -classpath /opt/idea-IC-191.6707.61/plugins/maven/lib/maven3/boot/plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version2019.1.2 compile exec:java -Dmain.class=GUI.Main
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building FireNavi_Paho 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ FireNavi_Paho ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 4 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ FireNavi_Paho ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- exec-maven-plugin:1.6.0:java (default-cli) @ FireNavi_Paho ---
[WARNING]
java.lang.NoClassDefFoundError: javafx/application/Application
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:550)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:270)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: javafx.application.Application
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 12 more
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.358 s
[INFO] Finished at: 2019-05-14T14:03:30+02:00
[INFO] Final Memory: 10M/44M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project FireNavi_Paho: An exception occured while executing the Java class. javafx/application/Application: javafx.application.Application -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Process finished with exit code 1

Wenn ich ehrlich bin, bin ich etwas überfragt was genau der Fehler mir mitteilen will außer das er die "NoClassFoundErrorException" wirft.
Intressanter weiße ist aber nix rot unterstrichen in meinem Code.
 
Wie kann ich das den rausfinden?

Kann das auch damit zusammenhängen, dass ich mit Maven das Projekt nicht bauen kann? Da bekomm ich auch eine menge Fehlermeldungen. Kann die auch gerne mal hier Posten.
 
Achso.
Das kommt dabei raus:

java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
 
Soweit so gut. Ferndiagnose wird jetzt schwer. Kann dir nur sagen, dass es bei mir mit Ubuntu 18.04, 18.10 und nun 19.04 und AdoptOpenJDK und Maven gut klappt... Ich kann mich irren, aber mich dünkt, meine Kommandozeile ist auch nicht so lang, wie deine - ich checke das später mal.
 
Achso.
Das kommt dabei raus:

java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
Ist das denn auch das Java, dass das openJFX mit drin hat?

Sprich: Du nutzt das openjdk und openjfx paket von Ubuntu? (die hoffentlich genau so aufgebaut sind wie bei debian)...

Was ich im Augenblick nicht verstehe: Das openjfx 11 installiert sich in ein eigenes Verzeichnis (/usr/share/openjfx/lib/)
Bei der 8ter Version hat sich das noch mit in der JRE integriert (/usr/lib/jvm/java-8-openjdk-amd64/)

Aber das sind auch nur die Pakete, die ich bei Debian sehe. Ubuntu scheint die aber auch zu nutzen. openjfx paket bei stretch ist das 8ter und bei sid ist es das 11er. Wenn es bei Ubuntu dieses Paket von Debian sein sollte (Diverse Threads lassen mich darauf schließen), dann kannst Du dir einmal /usr/share/doc/openjfx/TODO.Debian ansehen.

Sollte es aber so sein, dass das openjfx in einem anderen Verzeichnis ist, dann müsstest Du bei java und javac Aufrufen noch den openjfx Path als module path angeben (--module-path $PATH_TO_FX)

So Du alles per ubuntu Paketmanager installiert hast, kannst Du das auch schnell erkennen:
dpkg-query -L openjfx
Das sollte dir alle openjfx Dateien auflisten.

Generell gefällt mir das nicht wirklich. Ich habe bei meiner Linux Kiste ein openjdk mit integriertem openjfx und das nutze ich über path / JAVA_HOME Einträge (Ich nutze also nicht die alternative Methodik unter Linux für die Auswahl der Java Version).
Das ist aber auch nur wichtig, so weit wie Du Dinge auf Kommandozeile machst. Eclipse / IntelliJ bieten ja bei Projekten an, das gewünschte JRE/JDK zu spezifizieren.
 
Ach so - paar Ergänzungen:
- Ubuntu basiert mit auf Debian. Gleiches Paketformat und so. Daher sind hier die Pakete oft gleich. Klar: Warum sollte man sich doppelt arbeit machen?
- "stretch" / "sid": Das sind Versionsnamen. "sid" ist generell der Name der Unstable Distribution, in der neue Versionen getestet werden. "stretch" ist Debian 9, war also lange die "testing" Version, ehe Debian 9 offiziell heraus gekommen ist und dann Debian 10 (buster) das neue "testing" wurde.
Ich hoffe, der Rest war nicht zu kryptisch.

Und Hintergrund ist: Die Application Klasse kann er natürlich nicht finden, wenn das javaFX in einem anderen Verzeichnis ist. Das könnte also die Fehlermeldung erklären.

Aber ich sehe auch gerade: Ich bin etwas auf dem Holzweg, da Du das javaFX ja über Maven hinzu gefügt hast....
 
@kneitzel guter Tipp - ich wusste nicht mal, dass das OpenJFX-Paket jetzt auch bei 11.0.2 angekommen ist... Ich verwende es halt entweder als DL des SDKs, oder eben als Maven-Dependency.
 
Ja aber ich habe leider zu spät erkannt, dass es für Dich nicht wirklich hilfreich ist, denn Du gehst ja den "Maven Dependency Weg", der eben auch funktionieren sollte! Daher waren meine Beiträge wohl nicht wirklich hilfreich ...

Ich selbst habe mit javaFX bisher nicht besonders viel gemacht. Nur paar Tests und Spielereien um etwas mitreden zu können. Ich entwickle sonst eigentlich mehr serverseitig und habe daher nicht so viele Erfahrungen. Und das Meiste habe ich immer per JDK mit openjfx fertig drin gemacht.
 
Wie sieht denn mittlerweile deine pom.xml aus?
Die sieht mittlerweile so aus:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<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>de.hinsberger</groupId>
    <artifactId>FireNavi_Paho</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11</version>
        </dependency>

        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.0.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.miglayout/miglayout -->
        <dependency>
            <groupId>com.miglayout</groupId>
            <artifactId>miglayout</artifactId>
            <version>3.7.4</version>
        </dependency>


        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <repositories>
        <repository>
            <id>Eclipse Paho Repo</id>
            <url>https://repo.eclipse.org/content/repositories/paho-releases/</url>
        </repository>
    </repositories>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>com.pg.fxapplication.Main</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <finalName>FireNaviClient</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>GUI.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Ach so - paar Ergänzungen:
- Ubuntu basiert mit auf Debian. Gleiches Paketformat und so. Daher sind hier die Pakete oft gleich. Klar: Warum sollte man sich doppelt arbeit machen?
- "stretch" / "sid": Das sind Versionsnamen. "sid" ist generell der Name der Unstable Distribution, in der neue Versionen getestet werden. "stretch" ist Debian 9, war also lange die "testing" Version, ehe Debian 9 offiziell heraus gekommen ist und dann Debian 10 (buster) das neue "testing" wurde.
Ich hoffe, der Rest war nicht zu kryptisch.

Und Hintergrund ist: Die Application Klasse kann er natürlich nicht finden, wenn das javaFX in einem anderen Verzeichnis ist. Das könnte also die Fehlermeldung erklären.

Aber ich sehe auch gerade: Ich bin etwas auf dem Holzweg, da Du das javaFX ja über Maven hinzu gefügt hast....
Erst mal danke für deine ausführliche Antwort!
Genau, der Fehler liegt darin das die Application Klasse nicht finden kann, da JavaFX in einem anderen Verzeichnis liegt.
Daher funktioniert das ganze auf meinem Windows Rechner, weil da alles in einem Paket liegt.

In IntelliJ kann ich jetzt die Main starten mit folgenden VM Options:
--module-path /usr/lib/jvm/javafx-sdk-13/lib --add-modules=javafx.controls,javafx.fxml

Aber das bringt mir nix, da das ganze später auch ohne IntelliJ laufen soll.

Gibt es vielleicht ein Problem, dass ich JavaFX auch in meine pom.xml eingebunden habe?
Sollte ich dort die dependency löschen oder eher das Verzeichnis /usr/lib/jvm/javafx-sdk-13

Muss ich noch was einstellen um ihm zu sagen, dass er die Maven dependency als JavaFX nehmen soll?
 
Zuletzt bearbeitet von einem Moderator:
Was hat es den so mit der Fehlermeldung:
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x6d8d22e7) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x6d8d22e7
auf sich? Er sagt mir ja das er irgendwie die Klasse nicht findet bzw. kein Zugriff darauf hat. Aber in IntelliJ hat er alle Importe gefunden?

Noch ein kurzes Update:
Ich hab in IntelliJ unter File > Project Structure > Modules die JavaFX Abhängigkeit vom Filesystem gelöscht, so dass er jetzt die JavaFX Dependency von Maven benutzt.
 
Bei mir läuft es mit Maven und IntelliJ:

Java ist OpenJDK 11 ohne JavaFX, JavaFX ist auch nicht zusätzlich installiert.
pom.xml entspricht deiner, bis auf das Anpassen der main-Klasse.

Zusätzlich zu der bestehenden main ist eine neue main-Klasse hinzugefügt, die nichts anderes macht, als die bestehende main aufzurufen. Das ganze vehindert, das man direkt direkt das Modul-System nutzen möchte (macht es dabei mMn einfacher).


Zusätzliche Main:
Java:
package GUI;
public class StartableMain {
    public static void main(String[] args) {
        GUI.Main.main(args);
    }
}

Build-Section in der pom.xml
XML:
<build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <finalName>FireNaviClient</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>GUI.StartableMain</mainClass>
                    </manifest>
                </archive>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>attached</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
 
@mrBrown Und warum ist das doppelt verpackte jetzt überhaupt notwendig? Ich starte über das Mojohouse Plugin https://github.com/mojohaus/exec-maven-plugin - und da geht es von Maven aus.
#edit2 Wer lesen kann ist klar im Vorteil... Sorry, hab deine Erklärung überlesen.

Offtopic: Übrigens gibt es auch OpenJDKs mit gebundelten JavaFX: https://www.azul.com/downloads/zulu/zulufx/

Die Zeile
--module-path /usr/lib/jvm/javafx-sdk-13/lib --add-modules=javafx.controls,javafx.fxml
könnte dann sinnvoll werden wenn du das Projekt als bundle verteilen möchtest...

@mrBrown hast du das schon mal mit dem Backport vom jpackager versucht? Ich habe das bisher noch nicht zum laufen gebracht - aber es auch nicht allzu intensiv weiter probiert...
#edit Das ist natürlich nur mit den alten JDKs (<13) relevant...
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben