【问题标题】:JavaFX StackOverflowError while using WebView in rich UI application在富 UI 应用程序中使用 WebView 时出现 JavaFX StackOverflowError
【发布时间】:2014-09-15 00:14:48
【问题描述】:

我在使用 WebView 时遇到问题,当我加载它时,它看起来全是彩色闪烁,然后直接进入 stackOverFlowError。

对我来说似乎是一种递归。我不认为通过 -Xss 增加堆栈大小(已经尝试过)在这里会有所帮助。 我有哪些选择?

这可能是由 BIG SCENE GRAPH 引起的吗?我有相当重的图形密集型 UI 553 节点当主视图打开时,266 节点当浏览器页面加载时。在分离的 FXML 文件和分离的控制器中。

GMaps 出错(使用 webView):

java.lang.StackOverflowError
    at com.sun.prism.impl.BaseGraphics.<init>(BaseGraphics.java:89)
    at com.sun.prism.impl.ps.BaseShaderGraphics.<init>(BaseShaderGraphics.java:86)
    at com.sun.prism.d3d.D3DGraphics.<init>(D3DGraphics.java:42)
    at com.sun.prism.d3d.D3DGraphics.create(D3DGraphics.java:65)
    at com.sun.prism.d3d.D3DRTTexture.createGraphics(D3DRTTexture.java:77)
    at com.sun.javafx.webkit.prism.RTImage.getGraphics(RTImage.java:68)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:58)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)

...and so on

另一个 WebView 上的错误(Vanilla 未使用库):

java.lang.StackOverflowError
    at com.sun.javafx.geom.transform.AffineBase.transform(AffineBase.java:1021)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.transformClip(WCGraphicsPrismContext.java:262)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:301)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:314)
    at com.sun.javafx.webkit.prism.WCGraphicsPrismContext.setClip(WCGraphicsPrismContext.java:349)
    at com.sun.javafx.webkit.prism.WCBufferedContext.init(WCBufferedContext.java:64)
    at com.sun.javafx.webkit.prism.WCBufferedContext.getGraphics(WCBufferedContext.java:47)

可以在我之前的问题中找到正在发生的事情的图片:https://stackoverflow.com/questions/25247703/javafx-webview-rendering-graphical-glitches 当时我还没有收到这个错误,只是一个小故障。现在它把我带到了这个。

在某些更改后,仅图形故障不会引发异常芽(转到页面 google.com -> sector.sk -> facebook.com 等 stackoverflow 被抛出。我最多可以更改 1/2 个网站,然后它抛出的应用程序停止回应。)

-Xss 现在是默认值。 据我所知,我使用的是最新的javafx and java 8 u20

【问题讨论】:

    标签: java webview javafx stack-overflow


    【解决方案1】:

    您可以使用 SystemProperty glass.lens.stackSize 来设置堆栈 JavaFX ApplicationThread 的大小。 它是作为https://javafx-jira.kenai.com/browse/RT-36811 的一部分实现的。

    一旦我们切换到单片眼镜,这可能会更改为 glass.monocle.stackSize 尽管。

    您也可以在生成的 android 项目中设置属性 - 在 Jvm 参数下的 AndroidManifest.xml 中(添加 |-Dglass.lens.stackSize=128000) 或者 - 在 assets/javafx.platform.properties 中(添加行 android.glass.lens.stackSize=128000)

    还没有尝试过,但这应该会将stackSize增加到128KB, 即使对于非常复杂的应用程序,这也应该绰绰有余。

    如果它对您有用,请告诉我们。

    ==== 这来自 Stefan Fuchs

    【讨论】:

    • 在虚拟机选项中使用参数 -Dglass.lens.stackSize=128000 后,错误消失了跟踪它的方式不会引发任何错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2012-03-09
    相关资源
    最近更新 更多