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的方法來使這些目錄完全失效,然后再進行恢復。這樣一試果然可以。應用啟動一切正常。
總結
以上是生活随笔為你收集整理的fm核武破解 java出错_java.lang.UnsupportedClassVersionError 错误的原因的全部內容,希望文章能夠幫你解決所遇到的問題。