在 cmd 中尝试 运行 可执行 Jar 时出错
Error while trying to run executable Jar in cmd
我知道还有其他一些类似的问题,但解决方案似乎不起作用。 (我已经阅读了大约十几个堆栈溢出论坛)
这是我在 CMD 中尝试做的:
C:\Users\warre>java -jar C:\Users\warre\OneDrive\Desktop\MirrorUserInput.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: usefulTools/Main has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
C:\Users\warre>javac -version
javac 14
C:\Users\warre>java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) Client VM (build 25.251-b08, mixed mode, sharing)
我知道一些问题可能是由 JDK 和 JRE 之间的差异引起的,但是当我试图理解这种复杂性时我感到困惑(我知道两者之间的一般差异,并且阅读了几篇文章,但搞不清楚为什么它会在 eclipse 中引起问题。)
我用eclipse导出了这个。我使用了所有默认设置。如果需要,我可以发送此信息的屏幕截图。
你是对的。当 JDK 的版本高于 JRE 版本时会出现差异。
报告的主要数字是:
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
根据错误消息,我可以肯定地说,您的 eclipse JDK 版本设置为 Java 13,您机器的 JRE 版本是 8。
你有两个解决方案。一种解决方案可能至少将您的 JRE 升级到 13。或者转到 eclipse Java 编译器选项并将 JDK 版本降低到 JDK 8。
在 Eclipse 中,转到菜单命令 Window -> 首选项 -> Java -> 编译器,然后将 "Compiler compliance level" 设置为 1.8。
我知道还有其他一些类似的问题,但解决方案似乎不起作用。 (我已经阅读了大约十几个堆栈溢出论坛)
这是我在 CMD 中尝试做的:
C:\Users\warre>java -jar C:\Users\warre\OneDrive\Desktop\MirrorUserInput.jar
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: usefulTools/Main has been compiled by a more recent version of the Java Runtime (class file version 57.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access0(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.net.URLClassLoader.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
C:\Users\warre>javac -version
javac 14
C:\Users\warre>java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) Client VM (build 25.251-b08, mixed mode, sharing)
我知道一些问题可能是由 JDK 和 JRE 之间的差异引起的,但是当我试图理解这种复杂性时我感到困惑(我知道两者之间的一般差异,并且阅读了几篇文章,但搞不清楚为什么它会在 eclipse 中引起问题。)
我用eclipse导出了这个。我使用了所有默认设置。如果需要,我可以发送此信息的屏幕截图。
你是对的。当 JDK 的版本高于 JRE 版本时会出现差异。
报告的主要数字是:
Java SE 14 = 58,
Java SE 13 = 57,
Java SE 12 = 56,
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
根据错误消息,我可以肯定地说,您的 eclipse JDK 版本设置为 Java 13,您机器的 JRE 版本是 8。
你有两个解决方案。一种解决方案可能至少将您的 JRE 升级到 13。或者转到 eclipse Java 编译器选项并将 JDK 版本降低到 JDK 8。
在 Eclipse 中,转到菜单命令 Window -> 首选项 -> Java -> 编译器,然后将 "Compiler compliance level" 设置为 1.8。