小编And*_*s N的帖子

由于 JRE 8u232,JNI 在签名的 JAR 中找不到类

我有一个带有签名 JAR 的 Java 应用程序,其中包含所有类文件和资源。该应用程序附带一个捆绑的 JRE 和一个可执行文件。此可执行文件是用 C++ 编写的,并使用 JNI 加载 VM 并启动应用程序。这在过去完美无缺。

从 JRE 8u232(例如 Azul,还有来自 Oracle 的 8u231)开始,应用程序不再运行,因为在 JNI 的FindClass()函数中找不到指定的主类。它返回一个空指针,然后当我调用该ExceptionDescribe()函数时,它会显示 Java 方法中发生的 NPE JarVerifier::processEntry

Exception in thread "main" java.lang.NullPointerException
    at java.util.jar.JarVerifier.processEntry(JarVerifier.java:303)
    at java.util.jar.JarVerifier.update(JarVerifier.java:230)
    at java.util.jar.JarFile.initializeVerifier(JarFile.java:383)
    at java.util.jar.JarFile.ensureInitialization(JarFile.java:612)
    at java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:69)
    at sun.misc.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:991)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:451)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
Run Code Online (Sandbox Code Playgroud)

当我从 JAR 的 META-INF 文件夹中删除 *.RSA 和 *.SF 文件时,它又可以工作了。当我从 JRE 的“bin”文件夹调用“java”可执行文件时,它也可以工作,如下所示:

java -cp …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface

6
推荐指数
1
解决办法
183
查看次数

Azul Zulu JRE 中 crs-agent.jar 的目的是什么?

我已经更新到 Azul Zulu 8u282 JRE,我注意到一个新的 JAR 文件在我使用的以前的版本 (8u265) 中没有。它被称为“crs-agent.jar”,类文件都在包结构“com.azul.crs.*”内。当我用 IntelliJ 反编译它们时,它看起来像是一些诊断或报告的东西,而且还有网络在工作。

我在 Azul 网站上浏览了大量当前和旧版本的发行说明,但没有关于此 CRS 的信息。维基百科为该首字母缩写词提供了几个结果,其中“运营商路由系统”最有意义。

那么这个 JAR 是做什么用的呢?我可以删除它吗?

azul-zulu

1
推荐指数
1
解决办法
83
查看次数

标签 统计

azul-zulu ×1

java ×1

java-native-interface ×1