多次重新安装JDK后出现JNL错误

时间:2019-10-27 11:28:17

标签: java jde

嗨,我是Java的新手,但我尝试开始使用它,但是当我尝试运行hello world脚本时,遇到了此错误。我已经将这个错误输入到Google,并返回了一个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");
  }
}

我只是按照本教程的显示方式进行操作,因此我认为问题不存在,但仍然是菜鸟,因此非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

问题是,您的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

一切正常。