nav*_*ySV 6 java dll runtime openjfx java-11
有没有办法配置OpenJFX 11将其DLL提取到不同的用户指定目录?
在尝试将现有Java 10/Maven项目迁移到Java 11时,我尝试使用OpenJDK 11.为了使代码构建工作,我需要将JavaFX JAR添加到Maven pom.xml配置文件中(因为JavaFX不再是Java 11的内置部分).
但是,在运行时,我发现由于OpenJFX将DLL文件提取到用户目录中然后访问失败而导致的错误(请参阅下面的错误).多年来我有许多项目在使用C:\ Users*目录时出错(来自Microsoft Windows干扰文件锁和目录权限,反病毒扫描等),所以我试图避免这些目录可能.Java项目在Windows 7和RedHat 7上的Java 10下正常工作,这似乎意味着Oracle的JavaFX 10 JAR没有将DLL提取到C:\ Users*目录中.OpenJFX似乎没有麻烦将DLL写入这些目录,但之后无法读取这些相同的文件.
我运行的是带有service-pack 1的Microsoft Windows 7 Professional 64位.我还没有尝试使用OpenJDK 11和OpenJFX在Linux上运行,但我认为OpenJFX也会尝试在该平台上提取其DLL.
OpenJFX导致的运行时Java错误示例:
Loading library prism_d3d from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied
java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied
Loading library prism_sw from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied
java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied
Graphics Device initialization failed for : d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
Run Code Online (Sandbox Code Playgroud)
先前讨论和链接资源的摘要
从 OpenJFX 12 开始,您可以使用系统属性javafx.cachedir
来告诉 OpenJFX 在哪里提取其本机库。请注意不要在系统属性的“缓存目录”部分中使用驼峰式概念(如之前的注释和拉取请求注释中使用的那样)。
有关详细信息,请参阅此Pull-Request 。
在 12 之前的版本中,OpenJFX 会将其本机库提取到基于user.home
( System.getProperty("user.home") + "/.openjfx/cache/" + jfxVersion
) 的固定路径。
有两种方法可以修改 OpenJFX 将用作缓存位置的路径
java.library.path
系统属性告诉 OpenJFX 从您的自定义位置加载它(这将避免提取到固定的缓存位置)。user.home
即可修改缓存位置。有关详细信息,请参阅此代码。
归档时间: |
|
查看次数: |
567 次 |
最近记录: |