0

它看起来像一个太长的字符串导致以下异常:

Caused by: java.lang.StackOverflowError
    at java.lang.String.toLowerCase(String.java:2496)
    at com.gargoylesoftware.htmlunit.html.NamedAttrNodeMapImpl.fixName(DomElement.java:489)
    at com.gargoylesoftware.htmlunit.html.NamedAttrNodeMapImpl.get(DomElement.java:602)
    at com.gargoylesoftware.htmlunit.html.DomElement.getAttribute(DomElement.java:215)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.getStyleMap(CSSStyleDeclaration.java:634)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getStyleMap(ComputedCSSStyleDeclaration.java:243)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.getStyleAttribute(CSSStyleDeclaration.java:472)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getStyleAttribute(ComputedCSSStyleDeclaration.java:162)
    at com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration.jsxGet_position(CSSStyleDeclaration.java:4008)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.jsxGet_position(ComputedCSSStyleDeclaration.java:1304)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getPositionWithInheritance(ComputedCSSStyleDeclaration.java:1883)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1737)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)
    at com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.getTop(ComputedCSSStyleDeclaration.java:1769)

ComputedCSSStyleDeclaration我猜是导致这个问题的循环。

字符串的物理极限是多少?我可以限制循环检测器ComputedCSSStyleDeclaration吗?

4

2 回答 2

1

是否已经存在关于此的错误?http://sourceforge.net/p/htmlunit/bugs/1233/

于 2013-04-16T09:34:11.287 回答
1

原因是代码中存在递归调用。请检查。

在更深层次的JVM知识来解释这个问题:java虚拟机规范已经规定了java栈异常的两种情况:

  1. Java栈是允许自动扩展的, OOM(OutOfMemory)当申请不到足够的内存时会报错。
  2. Java栈是由栈帧构成的,每个java方法push一个帧,StackOverflowError当当前线程的栈深度大于jvm的允许值时会抛出。

也许对你有帮助:)

于 2013-04-16T08:50:26.400 回答