【发布时间】:2017-06-19 05:00:14
【问题描述】:
我已经从 jdk1.6(32) 升级到 jdk1.8(64) 和 Netbeans 从 6.* 到 8.*。 配置设置并成功更新 project.jar 文件。很少有外部罐子按原样使用,如下所示:
file.reference.bcmail-jdk16-136.jar
file.reference.bcprov-jdk16-136.jar
file.reference.jcommon-1.0.10.jar
file.reference.jdepend.jar
file.reference.jfreechart-1.0.9.jar
file.reference.log4j-1.2.14.jar
file.reference.registry.jar
file.reference.swingx.jar
file.reference.jshrink.jar
现在,我从 inno setup 准备好 app.exe 并部署了 exe,当我尝试运行 exe 时,我收到以下错误弹出消息:“发生 JNI 错误,请检查您的安装并重试”
当尝试从命令提示符运行时,我得到以下堆栈跟踪: C:\Users\100755224>java -jar C:\Dev_TSOFT\Sources\installer\tsoft\TSOFT.jar
=================================
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 118
Exception Details:
Location:
com/alstom/tsoft/Main.<init>([Ljava/lang/String;)V @56: ifeq
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: 2ab7 0002 2a11 7d91 b500 032a 1204 b500
0x0000010: 052a bb00 0659 2ab7 0007 b500 082a bb00
0x0000020: 0959 117d 9112 042a b400 08b7 000b b500
0x0000030: 0c2a b400 0cb6 000d 9900 3eb8 000e b800
0x0000040: 0fa7 0004 4d04 b800 112b be04 a000 142a
0x0000050: bb00 1259 2b03 32b7 0013 b500 01a7 000e
0x0000060: 2abb 0012 59b7 0014 b500 012a b400 01b6
0x0000070: 0015 04b6 0016 b1
Exception Handler Table:
bci [59, 65] => handler: 68
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
我已将库和源 JDK 版本设置为 jdk8。请建议,从 4 天开始,它对我来说是一个工作障碍。
提前致谢
【问题讨论】:
-
当您说 (64) 时,您是指 64 位还是 u64? JVM 的确切版本是什么?
-
C:\>java -version java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111) -b14,混合模式)
-
inno setup 是做字节码转换还是使用其他字节码处理工具?
-
抱歉,我不确定。
-
任何字节码处理工具都必须能够正确处理堆栈图属性,这一点至关重要。在 Java 6 中,对于不正确的代码,旧验证器会回退,而 Java 8 代码不存在这种情况。您必须检查哪些工具或库可能负责并更新它们。如果有疑问,请更新工具链中超过十年的所有软件……