Java 使用traits时获取VerifyError(JRE 1.8.0u25)

Java 使用traits时获取VerifyError(JRE 1.8.0u25),java,groovy,traits,Java,Groovy,Traits,我正在使用Groovy通过使用traits扩展一些JavaFX类 不幸的是,在运行时实现trait失败,导致VerifyError堆栈大小过大。我读到Groovy VerifyErrors应该是由版本中的JRE错误引起的,我听说Oracle在Java1.7_72中修复了这个问题。因为这也影响了1.7_u68,我相信如果他们为Java7修复了这个问题,他们也会为Java8修复这个问题。只需等待他们的下一个版本或尝试获得测试版。您得到的错误实际上似乎与Oracle修复程序无关。在traits的Gro

我正在使用Groovy通过使用traits扩展一些JavaFX类


不幸的是,在运行时实现trait失败,导致VerifyError堆栈大小过大。我读到Groovy VerifyErrors应该是由版本中的JRE错误引起的,我听说Oracle在Java1.7_72中修复了这个问题。因为这也影响了1.7_u68,我相信如果他们为Java7修复了这个问题,他们也会为Java8修复这个问题。只需等待他们的下一个版本或尝试获得测试版。您得到的错误实际上似乎与Oracle修复程序无关。在traits的Groovy实现中,这似乎是一个真正的bug,因为错误表明生成的字节码没有声明一个足以容纳推入其中的变量的堆栈大小!我会在Groovy的JIRA中提交一个bug,并使用您用来获取该bug的确切代码:我已经打开了一张罚单-非常感谢您的支持。我通过在对象创建之后注入所需的方法来解决这个问题,但我想稍后再回到traits,因为它们对我来说似乎是一个“更干净”的解决方案。
trait DoStuff {
   public void doStuff() {
      println "doing stuff here"
   }
}

class GBorderPane extends javafx.scene.layout.BorderPane {
   public GBorderPane() { 
      super()
   }
}

class TraitsMain {
   public static void main(String[] args){
      GBorderPane g=new GBorderPane().withTraits(DoStuff) // VerifyError here
   }
}
Exception in thread "main" java.lang.VerifyError: (class: GBorderPane1_groovyProxy, method: layoutInArea signature: (Ljavafx/scene/Node;DDDDDLjavafx/geometry/Insets;ZZLjavafx/geometry/HPos;Ljavafx/geometry/VPos;)V) Stack size too large
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2663)
    at java.lang.Class.getConstructor0(Class.java:3067)
    at java.lang.Class.getConstructor(Class.java:1817)
    at org.codehaus.groovy.runtime.ProxyGeneratorAdapter.<init>(ProxyGeneratorAdapter.java:192)
    at groovy.util.ProxyGenerator.instantiateDelegateWithBaseClass(ProxyGenerator.java:221)
    at groovy.util.ProxyGenerator.instantiateDelegateWithBaseClass(ProxyGenerator.java:189)
    at groovy.util.ProxyGenerator.instantiateDelegate(ProxyGenerator.java:181)
    at groovy.util.ProxyGenerator.instantiateDelegate(ProxyGenerator.java:177)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.withTraits(DefaultGroovyMethods.java:14938)
    at org.codehaus.groovy.runtime.dgm$619.doMethodInvoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.invoke(PogoMetaMethodSite.java:47)
    at org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite.call(PogoMetaMethodSite.java:68)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at traits.TraitsMain.main(TraitsMain.groovy:10)