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

时间:2019-04-06 15:52:39

标签: java

我有一个MyFirstProgram.java文件,其中包含两个类。我刚刚修改了路径,并尝试使用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.

这是路径:

introducir la descripción de la imagen aquí

仅当我直接在文件夹中调用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消息?

2 个答案:

答案 0 :(得分:2)

因此,问题在于您正在使用JDK 11中的javac进行编译,然后尝试使用Java 8进行运行。由于%JAVA_HOME%\bin中的java.exe在{{ 1}}。而且,我猜测它找不到C:\Program Files\Java\jdk-11.0.2\bin,因为您在不重新启动Shell的情况下将javac添加到了路径中,这意味着不会重新加载路径。

要解决此问题,您应该从路径中删除C:\Program Files\Java\jdk-11.0.2\bin条目,然后更新C:\Program Files\Java\jdk-11.0.2\bin环境变量以使其指向JAVA_HOME。然后重新启动您的Shell,它将从C:\Program Files\Java\jdk-11.0.2扩展到C:\Program Files\Java\jdk-11.0.2\bin的位置。

答案 1 :(得分:0)

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

我也遇到了同样的问题,我下载了Java Uninstall tools

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

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

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

添加新变量,例如:

变量名称:JAVA_HOME

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

编辑路径,如下所示:

%JAVA_HOME%\ bin