Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复java.lang.UnsupportedClassVersionError:不支持的主版本。次版本_Java_Jvm_Incompatibility_Unsupported Class Version - Fatal编程技术网

如何修复java.lang.UnsupportedClassVersionError:不支持的主版本。次版本

如何修复java.lang.UnsupportedClassVersionError:不支持的主版本。次版本,java,jvm,incompatibility,unsupported-class-version,Java,Jvm,Incompatibility,Unsupported Class Version,我正在尝试使用编辑、运行、编译等一体化工具 我已安装,并且已将path变量设置到../bin目录 在记事本++中运行“Hello world”时,我收到以下消息: java.lang.UnsupportedClassVersionError:test\u hello\u world: 不支持的major.minor版本51.0 位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.DefineClassSecond(

我正在尝试使用编辑、运行、编译等一体化工具

我已安装,并且已将path变量设置到
../bin
目录

在记事本++中运行“Hello world”时,我收到以下消息:

java.lang.UnsupportedClassVersionError:test\u hello\u world:
不支持的major.minor版本51.0
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.DefineClassSecond(未知源)
.........................................
我认为这里的问题在于版本;Java的某些版本可能是旧的或太新的

  • 我怎么修理它
  • 我应该安装JDK,并将path变量设置为JDK而不是JRE吗
  • JRE或JDK中的
    PATH
    变量之间有什么区别

  • 别担心,我已经解决了

    它实际上很简单——您需要用相同的版本安装两个JRE/JDK

    JRE 6->JDK 6

    JRE 7->JDK 7


    等等。

    java.lang.UnsupportedClassVersionError发生的原因是编译时JDK较高,运行时JDK较低。

    显示的版本号描述了类文件兼容的JRE版本

    报告的主要数字如下:

    JavaSE17=61,
    Java SE 16=60,
    Java SE 15=59,
    Java SE 14=58,
    Java SE 13=57,
    Java SE 12=56,
    Java SE 11=55,
    Java SE 10=54,
    JavaSE9=53,
    Java SE 8=52,
    JavaSE7=51,
    Java SE 6.0=50,
    Java SE 5.0=49,
    JDK 1.4=48,
    JDK 1.3=47,
    JDK 1.2=46,
    JDK 1.1=45
    
    (来源:)

    要解决实际问题,您应该尝试使用较新版本的Java JRE运行Java代码,或者为Java编译器指定目标参数,以指示编译器创建与早期Java版本兼容的代码

    例如,要生成与Java 1.4兼容的类文件,请使用以下命令行:

    javac-target1.4helloworld.java
    

    对于较新版本的Java编译器,您可能会收到一条关于未设置引导类路径的警告。有关此错误的详细信息,请参阅博客文章。

    此错误意味着您试图加载一个Java“类”文件,该文件是用比您安装的Java版本更新的Java编译的

    例如,您的
    .class
    文件可能是为JDK 7编译的,您正在尝试使用JDK 6运行它

    因此,解决方案是:

    • 升级Java运行时或
    • 如果有源代码,请使用本地Java编译器(如果有)重新编译该类

      javac FileName.java


    对于开发人员来说,如果其他开发人员签入.class文件,并且他们拥有比您更新的java版本,则可能会发生这种情况

    在Eclipse中,我只需进入菜单命令窗口->首选项->Java->编译器,然后将“Compiler compliance level”设置为1.6。

    您可以使用Java 7编译一些JAR库,而Java运行时只有Java 6。这可能发生在一些新的库中。

    在Eclipse的菜单窗口->首选项->Java->编译器中,同时检查“配置特定于项目的设置”


    如果在相同的Java版本中仍然存在错误:请尝试手动删除项目的生成文件夹。然后重新启动Eclipse。

    正如一些人在其他地方回答的那样,Java程序运行在一个比它编译时使用的旧版本的Java上。为了向后兼容,它需要“交叉编译”。换句话说,源和目标Java版本之间存在不匹配

    更改Eclipse菜单中的选项并不符合最初的海报,海报上的人说他/她没有使用Eclipse。在OpenJDK javac 1.7版上,如果使用参数
    -source
    -target
    ,并在编译时提供目标版本(即旧版本)的rt.jar文件,则可以对1.6进行交叉编译。如果你真的安装了1.6JRE,你可以指向它的安装(例如,Ubuntu上的/usr/lib/jvm/java-6-openjdk-i386/JRE/lib/rt.jar,SunOS上的/usr/jdk/jdk1.6.060/JRE/lib/rt.jar。对不起,我不知道它在Windows系统上的什么地方)。像这样:

    javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java
    
    看起来您可以从Internet下载rt.jar,然后指向它。但这并不太优雅:

    javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
    

    您正在尝试使用不支持代码编译版本的Java版本运行程序因此,基本上您必须使用较高版本编译代码,并尝试使用较低版本运行它。

    当你越来越

    Unsupported major.minor version 51.0
    

    而版本51.0对应于J2SE 7您很可能已经用Java 7编译了代码,并试图使用较低版本运行它。检查
    java-version
    显示的内容。它应该是Java7版本。如果没有,请在路径/JAVA_HOME中进行适当的更改。或者,您可以使用尝试运行代码的相同版本进行编译。如果配置混乱,您总是可以给出绝对路径
    /home/user/jdk1.7.0_11/bin/javac
    /home/user/jdk1.7.0_11/bin/java

    我在使用脚本构建应用程序时也遇到过同样的问题

    我在应用程序开发中使用,并在项目的构建属性中更改了编译器版本。但这对我不起作用。然后我发现我可以在Ant脚本中提供编译器版本

    我在编译Java文件的部分修改了Ant脚本

    <target name="build-java" depends="prepare-build">
        <echo message="Compiling java files"/>
        <javac ....
               target="1.5"...
        </javac>
    </target>
    
    
    
    当我安装1.7时,问题得到了解决。

    我在Mac上遇到了类似的情况,下面的过程对我很有效:

    在终端中,键入

    vi ~/.profile
    
    然后在文件中添加这一行,并保存

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
    
    然后键入java-version检查结果

    java -version 
    
    什么是
    .profile
    文件

    .profile文件是一个隐藏文件
    java -version 
    
     <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                    </configuration>
                </plugin>
           .....
    
    J2SE 8 = 52
    J2SE 7 = 51
    J2SE 6.0 = 50
    J2SE 5.0 = 49
    JDK 1.4 = 48
    JDK 1.3 = 47
    JDK 1.2 = 46
    JDK 1.1 = 45
    
    JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
    
    javac -version
    
    java -version
    
    jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
    
    dpkg -l "openjdk*" | grep ^i
    
    update-java-alternatives -l
    
    update-alternatives --config java
    
    apt-cache search ^openjdk
    
    apt-get install openjdk-7-jre
    
    yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
    
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home