- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我是 Java 新手,我正在尝试开始使用它,但是当我尝试运行我的 hello world 脚本时,我遇到了这个错误。我已将此错误输入谷歌,并返回一个 7 年前的堆栈溢出答案,讨论兼容的版本和不兼容的版本。所以我尝试卸载并返回一个版本,但显然我必须登录并提供公司名称以便计费?我不确定,但无论如何我都不能这样做。所以我重新安装了所有的Java。这是我从 java 版本中得到的:
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) Client VM (build 25.231-b11, mixed mode)
之后我删除了之前编译的文件并再次尝试。似乎编译文件没有问题,但当我尝试运行它时,我仍然得到。
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: MyClass 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.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.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)
如果有什么不同的话,这就是我的 hello world 语句的样子。
public class MyClass {
public static void main(String args[]) {
System.out.println("Hello World");
}
}
我按照教程所示进行了操作,所以我认为问题不存在,但我仍然是一个菜鸟,因此非常感谢任何帮助。
最佳答案
问题是,您的 Java 运行时是版本 8,而您的编译器是版本 13,因此不兼容。如果您运行javac -version
,它会告诉您类似javac 13.0.1
的信息。您应该检查是否卸载了 Java 8 并仅使用与 JDK 捆绑的运行时。那么版本不兼容的问题应该就消失了。
或者,您可以将 --release 8
添加到编译器调用中。这将告诉 Java 13 编译器生成与 Java 8 兼容的字节码。
例如,考虑以下类:
public class Main{
public static void main(String[] args) {
System.out.println("Hello world!");
System.out.println("Running on Java version "
+ System.getProperty("java.version"));
}
}
然后在没有附加标志的情况下编译它:
> jdk13/bin/javac .\Main.java
并在 Java 13 上运行它:
> jdk13/bin/java Main
Hello world!
Running on Java version 13.0.1
在 Java 8 上:
> jdk8/bin/java Main
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: 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
...
正如预期的那样崩溃了。
现在使用 release
标志编译它:
> jdk13/bin/javac --release 8 .\Main.java
再次测试:
> jdk8/bin/java Main
Hello world!
Running on Java version 1.8.0_192
> jdk13/bin/java Main
Hello world!
Running on Java version 13.0.1
一切正常。
关于java - 多次重装JDK后出现JNL错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58578949/
我正在制作一个简单的测试网站,我想知道是否可以仅重新加载 Controller ,而无需重新加载整个页面。 The Office
我对 python 和 matplotlib 的世界很满意,并且非常熟悉。我注意到我的 Mac 上的 Xcode 无法正常工作,所以我安装了 Apple 的最新版本,但它以某种方式破坏了我安装的 ma
我是一名优秀的程序员,十分优秀!