0

嗨,我是 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");
  }
}

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

4

1 回答 1

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

一切正常。

于 2019-10-27T11:37:49.067 回答