无法在macOS上执行JavaFX样本:没有找到工具包

 2023-02-16    502  

问题描述

尝试启动Javafx” Hello World”示例时,找不到本地库 – 或者,它们被拒绝.症状是”未找到工具包”例外.似乎对MacOS有一定的特殊性,因为在某个时候提到了签名.

我所做的(MACOS 10.14.6):

无法在macOS上执行JavaFX样本:没有找到工具包

  1. 从 https://adoptopenjdk.net
  2. 从 http://gluonhq .com/download/javafx-12-0-2-SDK-MAC .将其解压缩为$WRK_DIR/javafx-sdk-12.0.2
  3. 从 https://github.com/pithub.com/openjfx/samples.com/samples.com/samplescom/samples. >.将其解压缩为$WRK_DIR/samples-master

然后我遵循入门的说明(在这里href =” https://github.com/openjfx/samples/blob/master/master/commandline/non-modular/cli/cli/readme.md” rel =” nofollow noreferrer”>在这里).我选择了最简单的路径:没有IDE,没有像Maven,非模块化应用这样的构建系统,除了普通CLI.

$ WRK_DIR=$(pwd)
$ ls -lF
total 0
drwxr-xr-x@ 4 bruno  staff  128 19 jul 16:25 javafx-sdk-12.0.2/
drwxr-xr-x@ 8 bruno  staff  256 31 jul 10:18 samples-master/
$ PATH_TO_FX=$WRK_DIR/javafx-sdk-12.0.2/lib
$ ls $PATH_TO_FX 
javafx-swt.jar      javafx.properties   libglib-lite.dylib  libjfxwebkit.dylib
javafx.base.jar     javafx.swing.jar    libgstreamer-lite.dylib libprism_common.dylib
javafx.controls.jar javafx.web.jar      libjavafx_font.dylib    libprism_es2.dylib
javafx.fxml.jar     libdecora_sse.dylib libjavafx_iio.dylib libprism_sw.dylib
javafx.graphics.jar libfxplugins.dylib  libjfxmedia.dylib   src.zip
javafx.media.jar    libglass.dylib      libjfxmedia_avf.dylib
$ javac -version
javac 12.0.2
$ cd samples-master/CommandLine/Non-modular/CLI/hellofx
$ javac --module-path $PATH_TO_FX --add-modules=javafx.controls -d out $(find src -name "*.java")
$ find . -type f
./out/hellofx/HelloFX.class
./out/hellofx/Launcher.class
./src/hellofx/HelloFX.java
./src/hellofx/Launcher.java

直到尝试启动:

$ java -version
openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.2+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.2+10, mixed mode)$ java --module-path $PATH_TO_FX --add-modules=javafx.controls -cp out hellofx.HelloFX
Graphics Device initialization failed for :  es2, sw
Error initializing QuantumRenderer: no suitable pipeline found
   <stack trimmed>
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
   <stack trimmed>
Exception in thread "main" java.lang.reflect.InvocationTargetException
   <stack trimmed>
Caused by: java.lang.RuntimeException: No toolkit found
   <stack trimmed>

我所做的研究导致我认为找不到本地图书馆.因此,我尝试将$PATH_TO_FX添加到LD_LIBRARY_PATH和DY LD_LIBRARY_PATH,没有更好的结果.如下命令行:

$ java -Dprism.verbose=true --module-path $PATH_TO_FX --add-modules=javafx.controls -cp out hellofx.HelloFX
Prism pipeline init order: es2 sw 
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing 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
GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline
java.lang.UnsatisfiedLinkError: no prism_es2 in java.library.path: [/Users/bruno/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
   <trimmed the rest of errors that are essentially the above>

因此,确实存在(至少)libprism_es2.dylib没有发现的问题.然后,我尝试将$PATH_TO_FX添加到java.library.path:

$ java -Dprism.verbose=true -Djava.library.path=$PATH_TO_FX --module-path $PATH_TO_FX --add-modules=javafx.controls -cp out hellofx.HelloFX
Prism pipeline init order: es2 sw 
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing 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
GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline
java.lang.UnsatisfiedLinkError: /Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib: dlopen(/Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib, 1): no suitable image found.  Did find:
    /Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib: code signature in (/Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
   <...>

现在找到了库,但不被视为有效.

推荐答案

在您的命令行中:

$ java -Dprism.verbose=true --module-path $PATH_TO_FX \
    --add-modules=javafx.controls -cp out hellofx.HelloFX

一切看起来都还好,所以它应该可以正常工作.实际上,您可以运行它,直到失败:

GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline
java.lang.UnsatisfiedLinkError: /Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib: \
    dlopen(/Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib, 1): no suitable image found.  \
    Did find: /Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib: \
code signature in (/Users/bruno/try/javafx-sdk-12.0.2/lib/libprism_es2.dylib) \
not valid for use in process using Library Validation: \
mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.

有一个 bug 在Mac上不能加载11.0.4+11.2,并且会产生完全相同的错误消息.

但是,您正在运行AdpentOpenJDK 12.0.2,并且您的项目与 OpenJDK 12 ,因此,似乎这也扩展到采用12.0.2+10.

因此,尽管修复了这一点,您可以使用openjdk 12.请注意,已经存在报告 12个失败.

编辑

我可以确认最新的 11 preelease 用于Mac Works(实际上是Java版本11.0.5).

最新的 12 preelease 对于Mac,它可以正常工作.

其他推荐答案

不幸的是,已发布的版本的undionopenjdk 12.0.2无法正常工作

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK (build 12.0.2+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 12.0.2+10, mixed mode)

以上所述是小编给大家介绍的无法在macOS上执行JavaFX样本:没有找到工具包,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34036.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。