2011-08-22 116 views
4

我正在運行JAXB XJC代碼生成器(v2.2.4-1),它在32位Java上運行得很好。但是,當我在64位Linux上運行它,我得到的東西,如:運行32位java和64位java產生不同的結果

Exception in thread "main" java.lang.IllegalArgumentException: 
    Illegal class inheritance loop. 
    Outer class ProductSectionProperty may not subclass from inner class: ProductSectionProperty 

在我使用Oracle的JDK 1.6.0_u24兩種情況。

爲了解決這個問題我想:

  • 使用64位計算機上的32位的java
  • 指定-XX:+ UseCompressedOops
  • 指定-XX:-UseCompressedOops當我意識到的是,以上是缺省

但結果是一樣的。

任何想法爲什麼會發生這種情況或接下來要做什麼?

+3

我會嘗試的Java 6更新26,因爲它聽起來像一個錯誤。無論是應該工作或兩者都應該失敗。您也可以嘗試Java 7以查看它的行爲是否相同(即使您不打算使用它) –

+0

這兩個問題都沒有解決。 – ivant

+0

看起來像是時候與Oracle進行支持呼叫,Java顯然不便攜。你可以嘗試一個不同的JVM,IBM或JRockit將是主要的選擇。 –

回答

0

任何想法爲什麼會發生這種情況或接下來要做什麼?

1)無

2)我想嘗試忽略 32比64的問題,現在,看你是否能解決問題的不同方式。我搜索了「非法類繼承循環」的消息。並有很多點擊。嘗試掃描它們並查看症狀/根問題/解決方案是否適用於您的案例。

(我無法找到這一個Java錯誤,但錯誤的Java搜索沒有在我的經驗很好地工作......)

+0

我也嘗試過這樣的路徑,但是由於生成的類是一個相當大的項目的一部分,我留下了「修復」模式/綁定作爲最後的手段。 – ivant

+0

無論如何,它讓我困擾,JVM的行爲可能會有所不同。我唯一能想到的是,較長的地址可以以某種方式產生比JAXB代碼預期更大的散列值。但看起來不太可能,因爲hashCode方法仍然返回「int」。我瀏覽了JAXB包的源代碼,並找不到任何可疑的hashCode/equals方法。 – ivant