Raspberry Pi 4 JavaFX

  • Hi,

    ich bekomme es auf meinen Raspi 4 einfach nicht hin, eine .jar-Datei zu starten, die mit JavaFX programmiert wurde.

    Ich bekomme immer die Fehlermeldung, dass die Klasse nicht gefunden wurde. (JavaFX Application)

    Das sagt mir, dass JavaFX auf dem Raspi nicht vorhanden ist. Auf dem Raspi ist Java 11 drauf, da ist JavaFX ja leider sowieso nicht mehr eingebettet.

    Leider habe ich Probleme damit, JavaFX auf dem Raspi zu installieren. Gibt es eine ältere Java-Version in der JavaFX noch vorhanden ist? Das würde mir schon reichen.

    Vielen Dank

  • Das funktioniert leider nicht, ich kann normale .jar-Dateien öffnen aber die ich mit JavaFX (+FXML Controller) geschrieben habe laufen nicht.

    Dann kommt immer die Meldung: Fehler: Hauptklasse de.soundso.JavaFX_Beispiel konnte nicht gefunden oder geladen werden.

    Auf meinem Windows-PC kann ich die Jar ohne Probleme ausführen.

    Ich würde mir ja sonst JavaFX installieren, aber das ist nicht möglich. Ich versuche jetzt schon alles Mögliche seit 2 Tagen, aber ohne Erfolg...

    LG

  • Hallo,

    also soweit ich weiß, also was man so liest, ist JavaFX ein eher lahmendes Pferd. Mit Java 11 ist es aus Oracle Java ja rausgeflogen bzw. Orcale hat es nach OpenJFX als Teil von OpenJDK ausgelagert. Kein Ahnung, was da so jetzt Stand der Dinge ist - Java ist nicht so meins.

    Ich denke, dass heute eher Qt eingesetzt wird, was ja einwandfrei Cross-Platform läuft - und Bindings für eine ganze Reihe von Programmiersprachen hat.

    Gruß, noisefloor

  • Mit einer IDE hat das nichts zu tun.


    Qt kann man mit Python programmieren, ja. Es gibt PyQt und PySide, ich nehme ersteres.

  • Die Frage ist zwar schon 6 Monate alt, aber da sie unbeantwortet ist, will ich doch (m)eine Antwort beitragen.

    Die allgemeine Situation auf dem Raspberry Pi 4 unter Raspberry OS (= Raspbian Buster) ist folgende:

    • Vorinstalliert ist Java in der Version openjdk-11-jdk. Diese Version unterstützt das neu in Java eingeführte Modulkonzept.
    • Im Paket openjfx (das mit apt-get zu installieren ist) wird JavaFX in einer neuen Version bereitgestellt, die das neue Modulkonzept von Java verwendet.
    • Diese neue Version von JavaFX stellt JavaFX in 7 Modulen bereit. Nach der Installation desPakets openjfx sind diese Modul im Verzeichnis /usr/share/openjfx/lib verfügbar.
    • Die Datei jfxrt.jar, mit der eine frühere Version von JavaFX bereitgestellt wurde, steht nicht mehr zur Verfügung. (Die Datei jfxrt.jar konnte mit Java-8 verwendet werden.)
    • Da die neue Version von JavaFX durch Module bereitgestellt wird, müssen die benötigten Module beim Aufruf von java angegeben werden. Dazu werden die Optionen --module-path und --add-modules verwendet.
    • Wenn eine .jar-Datei hergestellt werden soll, die Elemente von JavaFX verwendet, müssen die benötigten Module von JavaFX im classpath angegeben werden.

    Da JavaFX für openjdk-11-jdk und JavaFX für Java-8 recht unterschiedlich sind, halte ich es für zweckmäßig, die jar-Datei auf dem Raspberry für die dort verfügbaren Versionen von Java und JavaFX neu zu erzeugen. Allerdings muss ich zugeben, dass es nicht völlig aussichtslos ist, eine für Java-8 und die im Jahr 2018 bereitgestellte ältere Version von JavaFX erzeugte .jar-Datei auf dem Raspberry auszuführen. Für ein altes Beispielprogramm hat bei mir folgendes geklappt:

    Code
    java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.graphics,javafx.fxml -jar FXButtonMVCDemo01_2.jar

    Wie man sieht, kommt es darauf an, den Modulpfad und die benötigten Module anzugeben. Die drei oben angegebenen Module sind meist ausreichend, falls erforderlich, sind auch javafx.media, javafx.swing, javafx.web noch zu nennen.

    Als Anhang füge ich eine Archivdatei bei, die in zwei Verzeichnissen zwei einfache Beispiele für JavaFX bereitstellt. Zu jedem dieser Beispiele wird eine ant-Datei bereitgestellt, die alle Dienste implementieren, die für das Compilieren, das Paketieren als .jar-Datei sowie die Programmausführung bereitstellen. Einzelheiten stehen jeweils in den Dateien mit dem Namen README.txt.

    JavaFXBeispiele.tgz

    Das Beispiel im Verzeichnis FXSliderGraphicsDemo04 implementiert ein Beispielprogramm, das einen Strich ins Fenster zeichnet, dessen Darstellungsattribute durch Bedienelemente verändert werden können.

    Das Beispiel im Verzeichnis FX3DOracleDemo01 stammt von Oracle (darf unter Angabe dieser Quelle weitergegeben werden) und demonstriert, dass JavaFX auf dem Raspberry Pi 4 die GPU verwenden kann. Bei diesem Beispiel ist wichtig, dass der Aufruf von java mit dem zusätzlichen Argument

    Code
    -Dprism.forceGPU=true

    erfolgt. Wenn dieses Argument fehlt, wird die GPU nicht verwendet und es erscheint eine Fehlermeldung, die besagt, dass die optionale Komponente SCENE3D nicht zur Verfügung steht. In der ant-Datei für dieses Beispiel wird dieses zusätzliche Argument verwendet.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!