繁体   English   中英

JNI 错误:一个类已被更新版本的 Java 运行时编译

[英]JNI error : A class has been compiled by a more recent version of the Java Runtime

我有一个包含两个类的 MyFirstProgram.java 文件。 我只是修改了 Path 并尝试使用javajavac测试文件。

public class MyFirstProgram{
    public static void main(String[] args){
        System.out.println("Hello ! World :)");
    }
}

但是,它返回给我:

C:\Users\antoi\Documents\Programming\Julien>java MyFirstProgram.java
Error: Could not find or load main class MyFirstProgram.java

C:\Users\antoi\Documents\Programming\Julien>javac MyFirstProgram.java
'javac' is not recognized as an internal or external command,
operable program or batch file.

这是路径:

图像描述简介

它仅在我直接在文件夹中调用 javac 时才有效:

C:\Users\antoi\Documents\Programming\Julien>"C:\Program Files\Java\jdk-11.0.2\bin\javac" MyFirstProgram.java

C:\Users\antoi\Documents\Programming\Julien>java MyFirstProgram
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: MyFirstProgram has been compiled by a more recent version of the Java Runtime (class file version 55.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)

但是它无法显示消息java并显示存在UnsupportedClassVersionError 我从其他帖子中了解到,我的javac Java 运行时环境可能不符合java命令。 要打印 Hello World 消息,需要遵循哪些步骤?

因此,问题是您正在使用 JDK 11 中的javac编译,然后尝试使用 Java 8 运行。由于%JAVA_HOME%\\bin的 java.exe 在C:\\Program Files\\Java\\jdk-11.0.2\\bin之前被拾取C:\\Program Files\\Java\\jdk-11.0.2\\bin 而且,我猜它找不到javac因为您将C:\\Program Files\\Java\\jdk-11.0.2\\bin到路径中,而没有重新启动 shell,这意味着不会重新加载路径。

要解决此问题,您应该从路径中删除C:\\Program Files\\Java\\jdk-11.0.2\\bin条目,然后更新JAVA_HOME环境变量以指向C:\\Program Files\\Java\\jdk-11.0.2反而。 然后重新启动你的 shell,它应该选择C:\\Program Files\\Java\\jdk-11.0.2\\bin%JAVA_HOME%\\bin扩展。

该错误说明您的类是由较新版本的JDK-11.0.2编译的,并由较低版本的JDK-8

同样的问题发生在我身上,就我而言,我下载了Java 卸载工具

此工具将检查您计算机上的 Java 版本。 如果发现过时的版本,此工具将帮助您删除它们。

实际上,无论我以何种方式下载了版本 8 的 Java 更新,问题都会发生,但是在此工具的帮助下,我可以轻松卸载版本 8 的更新,然后照常运行我的程序。

环境变量中,我像这样设置系统变量/路径,这已经很完美了:

添加新变量,如:

变量名:JAVA_HOME

变量值:C:\\ProgramFiles\\Java\\jdk-13.0.2

编辑路径,如:

%JAVA_HOME%\\bin

该错误说明您的类是由较新版本的 JDK-11.0.2 编译的,并由较低版本的 JDK-8 执行。

Environment Variables Edit Path 中列出的System Variables 将 JavaPath 向下移动到底部。 现在重新启动 shell/cmd 提示符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM