fm核武破解 java出错_java.lang.UnsupportedClassVersionError 错误的原因

休假回来上班的第一天,就被同事告之WINDCHILL测试系统升级失败需要做系统恢复。我进系统看了下现状,数据库都已经无法启动了,报日志文件丢失!看来他们不是一般的瞎搞。我做了一下clear logfile的操作,数据库算是起来了。接下来直接恢复应用的文件系统吧。放入备份带直接恢复。但我在启动应用的时候,发现servermanager报了这样一个错误:

10/13/08 14:24:35: main: *ERROR*: ServerManagerMain abort: java.lang.UnsupportedClassVersionError: wt/manager/jmx

/Hook (Unsupported major.minor version 49.0)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.ClassLoader.defineClass0(Native Method)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.ClassLoader.defineClass(ClassLoader.java:808)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:147)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.net.URLClassLoader.defineClass(URLClassLoader.java:475)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.net.URLClassLoader.access$500(URLClassLoader.java:109)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:848)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.security.AccessController.doPrivileged1(Native Method)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.security.AccessController.doPrivileged(AccessController.java:389)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.net.URLClassLoader.findClass(URLClassLoader.java:371)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.ClassLoader.loadClass(ClassLoader.java:570)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:442)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.ClassLoader.loadClass(ClassLoader.java:502)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.Class.forName1(Native Method)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at java.lang.Class.forName(Class.java:180)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at wt.manager.ServerTable.(ServerTable.java:60)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at wt.manager.ServerManagerImpl.(ServerManagerImpl.java:106)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at wt.manager.ServerManagerMain.run(ServerManagerMain.java:207)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: *ERROR*:    at wt.manager.ServerManagerMain.main(ServerManagerMain.java:146)

M-PM-GM-FM-ZM-RM-; 10/13/08 14:24:35: main: ServerManager stopped

servermanager停止了,methodserver也就没有起来。到网上搜了一下这个错误。发现这样一篇文章,摘录如下:

因为,高版本的JDK生成的class文件使用的格式,可能与低版本的JDK的.class文件格式不同。这样,低版本的JVM无法解释执行这个.class文件,会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。

这个错误尤其在JDK5与JDK5之前的版本上表现明显。因为,JDK5在Java语法上作了不少增强,引入了一些新的.class文件的元素,导致旧版本的JVM无法解释、执行.class文件。即使这个类并没有使用任何JDK5的新元素,但是JDK5生成的.class文件,JDK1.4及其以前的JVM都无法辨认!

所以,目前使用最广的,还是JDK1.4。很多软件和项目都无法使用JDK5。

有一个名叫 Toby Reyelts 的开发人员决定消除 JDK 5.0 编译器限制。结果就是开放源代码的 Retroweaver 项目(参见 参考资料)。Retroweaver 使用 classworking 技术来修改由 JDK 5.0 编译器生成的二进制类表示,以便这些类可以与早期的 JVM 一起使用。

它通过修改JDK5生成的.class文件,将其变为JVM1.4及之前版本能够运行的.class文件。

目前,使用新版本的IDE编辑器可能会造成你遭遇java.lang.UnsupportedClassVersionError 错误。

比如,Eclipse3.2+MyEclipse5.0这个新版的IDE工具。进入首选项---Java---编译器,可以看到,默认的编译器依从等级是5.0,这里改为1.4,因为我们使用的软件需要运行在JDK1.4的JVM上。

同一配置区下的已安装JRE中,不要安装JRE,而是安装JDK,指定1.4或1.5的JDK。还是使用jdk1.4。

在MyEclipse----应用服务器下,指定Tomcat5。指定Tomcat使用jdk1.4。

这样,就全部指定使用Jdk1.4来编译和运行程序了。如果全部指定jdk5也是可以的。但是,绝对不能够使用jdk5编译程序,而又在jdk1.4上运行程序,那样将会抛出java.lang.UnsupportedClassVersionError不支持的Class版本错误。

这种情况下,不论是Eclipse生成的war包,还是ant文件生成war包,都使用jdk5编译,就会在运行时出现错误,该应用程序将无法启动。如果你查看Tomcat的日志文件,将会看到正是java.lang.UnsupportedClassVersionError错误发生了!

看来是版本之间的问题。但是我已经恢复了啊,应该没有这样的问题。后来仔细想想发现问题所在。我直接恢复文件系统下所有的目录和文件,同名的文件会被覆盖,这点是对的。但升级过程中新增加的一些文件还继续存在,正是这些新增的文件导致了版本的问题。我可以先删除或通过MV的方法来使这些目录完全失效,然后再进行恢复。这样一试果然可以。应用启动一切正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值