'不支持的major.minor版本52.0'是什么意思,我该如何解决?

And*_*ndy 26 java eclipse version

好的,所以我松散地理解52.0是Java 8,并且异常意味着某些代码是用一个版本的java编译的,而另一些代码是用另一个版本编译的.我无法理解的是它绕着它的方向.

这是我得到的堆栈跟踪:

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openrdf/model/ValueFactory : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2615)
    at java.lang.Class.getMethod0(Class.java:2856)
    at java.lang.Class.getMethod(Class.java:1668)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
Run Code Online (Sandbox Code Playgroud)

我正在从eclipse执行我的代码,它在到达main之前崩溃了.我在这里跟了几篇帖子说要改变我的合规水平/我的JRE,但我似乎无法解决它.

错误是说'ValueFactory'类是用java 8编译的,还是我的代码有?我已经尝试将我的合规级别更改为1.6,1.7和1.8,但这些都没有解决问题.

Men*_*ena 17

你并不需要改变这里的合规性水平,或者更确切地说,你应该,但是这不是问题.

代码符合性可确保您的代码与给定的Java版本兼容.

例如,如果您有针对Java 6的代码合规性,则不能使用Java 7或8的新语法功能(例如钻石,lambda等等).

这里的实际问题是你试图在Java版本中编译一些看起来与类路径中的项目依赖项不同的东西.

相反,您应该检查您用于构建的JDK/JRE.

在Eclipse中,打开项目属性并在Java构建路径中检查选定的JRE.

如果您正在使用自定义Ant(等)脚本,那么您还需要查看一下,以防上述内容本身不够用.


R. *_*ber 8

您的代码是使用Java 8编译的.

使用较旧的JDK(合规级别)编译代码或在Java 8 JRE上运行代码.

希望这可以帮助...


小智 5

实际上,您有一个针对更高JDK(在您的情况下为JDK 1.8)编译的代码,但在运行时您提供较低的JRE(JRE 7或更低).

您可以通过在编译
时添加目标参数来解决此问题,例如,如果运行时目标是1.7,则应使用1.7或更低版​​本

javac -target 1.7 *.java
Run Code Online (Sandbox Code Playgroud)

如果你正在使用eclipse,你可以在Window - > Preferences - > Java - > Compiler - > set"Compiler compliance level"中选择你的运行时jre版本或更低版本.