编译时出现异常:版本错误50.0,应为49.0。

39

我正在使用JXL API编写一个应用程序,当我尝试使用Eclipse IDE编译时,一切正常,但在尝试在命令提示符中编译时,它无法编译并显示以下异常信息。

Extract.java:6: cannot access jxl.read.biff.BiffException bad class file: C:\Program Files\Java\jdk1.5.0_01\jre\lib\ext\jxl.jar(jxl/read/biff/BiffException.class)
class file has wrong version 50.0, should be 49.0
Please remove or make sure it appears in the correct subdirectory of the classpa
th.
import jxl.read.biff.BiffException;
                     ^
1 error

编辑:

我能够使用JDK 1.6执行。由于JDK 1.6必须与较低版本兼容,为什么它不支持使用JDK 1.5编译的类文件。


感谢大家的回答和评论,我已经按照Oscar Reyes的建议解决了问题。 - i2ijeya
5个回答

72

你使用的库是使用Java 6编译的。

你的编译器是Java 5,因此它无法理解那种格式。

要解决这个问题,你需要获取一个1.5版本的库或将你的编译器升级到1.6版本。我建议后者。


11
没问题 - Eclipse集成了自己的编译器,因此您甚至不需要JDK。而且该编译器符合Java6标准 :) - Andreas Dolk

3
根据http://www.jnode.org/node/2140,我猜测您可能混合使用了不同版本的Java编译的代码。Class文件版本50.0用于Java 6.0,而49.0用于Java 5.0。
尝试执行“build clean”以清除所有现有的类文件,然后进行常规构建。
JNode仅使用Java 6.0进行开发。上次我尝试时,它无法使用Java 5.0(也称为1.5)构建。(这是构建JNode引导映像的程序存在的问题。)
尝试在Eclipse中更改构建器。如果您正在使用3.4,则为项目-属性-Java编译器-启用项目特定设置-编译器兼容性级别=1.6。您还需要安装JRE 1.6。

使用 mvn clean 命令帮助我找到了 mvn.bat 文件,而在我的情况下,该文件设置了自己的 JAVA_HOME 版本。 - another

1
请检查您在Eclipse中的类路径,并确保它与您在命令提示符中编译的类路径相同,还要检查您的库导入。

是的,我已经检查了所有内容,一切都正确。但是即使如此,我仍然遇到了异常。 - i2ijeya

1
这意味着您使用Java 6编译了该类,但尝试在Java 5上执行。
解决方案: 如果您正在使用ant,请在项目根目录执行以下步骤: 1. ant clean 2. ant deploy
如果您正在使用eclipse,则只需清理工作区(删除使用Java 6编译的类文件)并重新构建即可。

0

这可能是因为在你的IDE中指向了最新版本的JDK,但当你在IDE之外构建程序(可能是使用Maven),你的java_home是旧版本而不是IDE中的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接