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

Java 多次重新安装JDK后出现JNL错误,java,jde,Java,Jde,您好,我是Java新手,我正在尝试开始使用Java,但是当我尝试运行hello world脚本时,我遇到了这个错误。我已经把这个错误注入谷歌,并给出了一个有7年历史的堆栈溢出答案,其中谈到了兼容的版本以及不兼容的版本。所以我尝试卸载并返回一个版本,但显然我必须登录并提供一个公司名称,以防计费?我不确定,但无论如何我都做不到。所以我重新安装了所有的Java。这是我从java版本得到的: java version "1.8.0_231" Java(TM) SE Runtime Environment

您好,我是Java新手,我正在尝试开始使用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");
  }
}

我是按照教程所显示的方式来做的,所以我不认为存在问题,但我仍然是一个noob,因此非常感谢您的帮助。

问题是,您的Java运行时是版本8,而编译器是版本13,因此不兼容。如果您运行
javac-version
,它将告诉您类似
javac13.0.1
的内容。您应该检查是否卸载了Java8,并且只使用与JDK捆绑的运行时。那么版本不兼容应该消失了

或者,您可以将
--release8
添加到编译器调用中。这将告诉Java13编译器生成与Java8兼容的字节码

例如考虑以下类:

公共类主{
公共静态void main(字符串[]args){
System.out.println(“你好,世界!”);
System.out.println(“在Java版本上运行”
+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并重新安装了它,以确保它没有缺少任何组件。但它仍然告诉我运行时丢失了。我寻找了一个运行时13.0.1,但它只是再次打开了JDK。你说它应该有自己的运行时,对吗?是的,通常JDK包含Java运行时环境。您应该在JDK的
bin
目录中找到
java.exe
或只是
java
。可能没有将JRE添加到
path
环境变量中,因此命令行找不到JRE。是的,您是正确的,没有添加。我进入bin文件夹,找到java.exe并将其添加到路径中,但错误仍然显示相同的错误错误:打开注册表项“Software\JavaSoft\java Runtime Environment”错误:找不到java.dll错误:找不到java SE Runtime Environment。很抱歉,我无法获取此评论部分以代码形式添加这些部分