2011-08-22 111 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