2015-05-12 86 views
-1

我看了一下,找不到任何針對我的問題的答案,所以我正在製作一個新的答案。修復編譯版本

所以我目前正在尋找一個解決方案,正式脫離我的控制,但如果有什麼我可以嘗試去修復它的話會很好。

原因是某些正在加載的類是用戶提供的,並且沒有用最低兼容版本的java編譯正確,所以它會導致不可預知的Java要求。

當然,這隻會在必要時完成,但如果它沒有加載該Java版本,則嘗試修補加蓋的java版本,以便它可以嘗試它。

基本上我試圖糾正(如果可能的話)印在Java字節碼所陳述的編譯版本,讓不兼容的Java版本的錯誤非常不扔了,甚至當他們通常會,如果代碼能夠成功地原本編上有問題的較低java版本。

基本上,除了提供的可能會丟失的內置庫之外,我不確定編譯器在不同版本之間是否有大不相同的字節碼。如果是這種情況,那麼像這樣的東西無論如何都無法工作。

欣賞它,jdphenix,這是我需要知道的。

對不起,我在這裏做錯了,得到消極的票。

+0

您可以粘貼JVM引發的錯誤或異常嗎?這將有助於進一步推斷問題。 –

+0

@Mohan Raj呃,這實際上並不是我的錯誤,但是我正在進行頭腦風暴的錯誤,我可以嘗試通過注入來修復,因爲mods提供了我沒有直接控制權,所以這更多的是對可能或不可以編譯後要更正。 我在說的錯誤是類似'不支持major.minor版本51.0' –

回答

1

不幸的是,字節碼實際上太不同了。在課堂上蓋章的版本是必不可少的,如果這不正確,將無法正常工作。不幸的是,這種方式無法修復,所以在這方面你會受到其他人的擺佈。

2

不幸的是,Java類文件只能向前兼容。因此,針對較新版本的類文件將無法運行系統的JVM。

主要版本之間存在重大變化。例如,我可以在腦海中想到的是Java 5中的可變參數和泛型。

+0

謝謝,這是我需要知道的。我的問題是否令人反感,還是該網站充斥着拖延下流的人? –

+0

我不相信你的問題是堆棧溢出題外話。不過,我只是一個人的意見。我可以提供的最佳見解是指向幫助中心文章http://stackoverflow.com/help/on-topic的鏈接 - 您還可以在http://meta.stackoverflow.com/上搜索元頁面。看看那裏是否有任何東西。 – jdphenix

0

在類加載階段,JVM進行字節碼驗證。在類文件中,它將獲得關於編譯它的Java版本的信息,這有助於JVM找出試圖加載並進一步執行的當前Java版本。類文件是向後兼容的,你可以在java 5上編譯,並且可以運行在更高版本,反之亦然,因爲上述驗證。字節代碼可以注入到已經存在的類文件中,但是如果沒有正確注入,應用程序可能會遭受一些異常的執行。

+0

JVM如何找到從類文件編譯的Java版本? –