Estou tentando executar um exemplo de javafx em um raspaberry pi 3 em um ambiente incorporado (buildroot), quero executá-lo sem o X. quando executo o comando:
/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
Estou tendo o erro a seguir:
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
Corri os exemplos hello_triangle e hello_dispmanx para testar a aceleração da gpu e não houve problemas. Não sei por que estou recebendo o Could not get EGL surface
erro. Existe alguma maneira de depurar esse erro
Configurações de Java:
# 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
fonte
fonte
Respostas:
Finalmente, descobri ... Como estou usando o buildroot, todas as bibliotecas raspberry pi userland (GPU) estão na
/usr/lib
pasta. No entanto, aprofundando-se no código-fonte do monóculo, mais precisamente no DispmanPlatformFactory.java , podemos ver que a maneira como eles correspondem à plataforma é procurar pelo libbcm_host.so no/opt/vc/lib
qual não existe na configuração do buildroot. Uma solução rápida para aqueles que usam BuildRoot é criar um link simbólico paralibbcm_host.so
nos/opt/vc/lib
fonte