java - 多次重装JDK后出现JNL错误

标签 java jde

嗨,我是 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/

相关文章:

blackberry - 如何在 Blackberry 项目中添加外部 jar 或 zip 文件

java - 是否可以通过黑莓 API 发送 BBM 消息?

java - BlackBerry JDE 支持的设备吗?

emacs - Java 模式缩进

java - 按钮 lWUIT j2me setlocation

java - Java中如何同时遍历两个列表?

java - 我如何开始一个更大的项目?

java - 如何更改默认的java路径

java - 向 JTable 行添加颜色