Ich versuche, ein Javafx-Beispiel auf einem Himbeer-Pi 3 in einer eingebetteten Umgebung (Buildroot) auszuführen. Ich möchte es ohne X ausführen, wenn ich den Befehl ausführe:
/root/jre-13.0.1/bin/java -Dfile.encoding=UTF-8 --add-modules javafx.controls,javafx.fxml -Dprism.verbose=true -Djavafx.verbose=true -Dglass.platform=Monocle -Dprism.order=es2 -Djava.library.path=/root/jre-13.0.1/lib/ -Dembedded=monocle -jar /home/root/NetBeansProjects//JavaFXFXML/dist/JavaFXFXML.jar
Ich bekomme folgenden Fehler:
cmd : cd '/home/root/NetBeansProjects//JavaFXFXML'; '/root/jre-13.0.1//bin/java' -Dfile.encoding=UTF-8 --add-modules javafx.controls,javafx.fxml -Dprism.verbose=true -Djavafx.verbose=true -Dglass.platform=Monocle -Dprism.order=es2 -Djava.library.path=/root/jre-13.0.1/lib/ -Dembedded=monocle -jar /home/root/NetBeansProjects//JavaFXFXML/dist/JavaFXFXML.jar
JavaFX launchApplication method: launchMode=LM_JAR
Prism pipeline init order:
es2
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Using system sized mask for primitives
Not
f
orcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2_monocle
Loaded /root/jre-13.0.1/lib/libprism_es2_monocle.so from java.library.path
succeeded.
GLFactory using com.sun.prism.es2.MonocleGLFactory
Loaded /root/jre-13.0.1/lib/libglass_monocle.so from java.library.path
com.sun.glass.ui.monocle.GLException: 0x300b: Could not get EGL surface
at javafx.graphics/com.sun.glass.ui.monocle.AcceleratedScreen.<init>(Unknown Source)
at javafx.graphics/com.sun.glass.ui.monocle.NativePlatform.getAcceleratedScreen(Unknown Source)
at javafx.graphics/com.sun.prism.es2.MonocleGLFactory.initialize(Unknown Source)
at javafx.graphics/com.sun.prism.es2.ES2Pipeline.<clinit>(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Unknown Source)
at javafx.graphics/com.sun.prism.GraphicsPipeline.createPipeline(Unknown Source)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(Unknown Source)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
(X) Got class = class com.sun.prism.es2.ES2Pipeline
GraphicsPipeline.createPipeline: error initializing pipeline com.sun.prism.es2.ES2Pipeline
Graphics Device initialization failed for : es2
Ich habe die Beispiele hello_triangle und hello_dispmanx ausgeführt, um die GPU-Beschleunigung zu testen, und dort gab es keine Probleme. Ich weiß nicht, warum ich den Could not get EGL surface
Fehler erhalte. Gibt es eine Möglichkeit, diesen Fehler zu debuggen?
Java-Einstellungen:
# java --version
openjdk 13.0.1-BellSoft 2019-10-15
OpenJDK Runtime Environment (build 13.0.1-BellSoft+9)
OpenJDK Server VM (build 13.0.1-BellSoft+9, mixed mode)
java
javafx
raspberry-pi
buildroot
Rui Sebastião
quelle
quelle
Antworten:
Endlich habe ich herausgefunden ... Da ich Buildroot verwende, befinden sich alle GPU-Bibliotheken (Himbeer-Pi-Userland) im
/usr/lib
Ordner. Wenn wir jedoch tief in den Monocle-Quellcode, genauer gesagt in DispmanPlatformFactory.java , gehen , können wir sehen, wie sie mit der Plattform übereinstimmen , indem nach libbcm_host.so gesucht wird, in/opt/vc/lib
dem die Buildroot-Konfiguration nicht vorhanden ist. Eine schnelle Problemumgehung für Benutzer von Buildroot besteht darin, eine symbolische Verknüpfung zulibbcm_host.so
in zu erstellen/opt/vc/lib
quelle