我的应用程序有一个由ScrollPane包含的非常大的画布。
在画布操作期间,大约1000万像素的JavaFX开始抛出这些空指针异常:
at com.sun.javafx.sg.prism.NGCanvas$RenderBuf.validate(Unknown Source)
at com.sun.javafx.sg.prism.NGCanvas.initCanvas(Unknown Source)
at com.sun.javafx.sg.prism.NGCanvas.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.renderForClip(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.renderRectClip(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.renderClip(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.sg.prism.NGGroup.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGRegion.renderContent(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.prism.NGNode.doRender(Unknown Source)
at com.sun.javafx.sg.BaseNode.render(Unknown Source)
at com.sun.javafx.tk.quantum.ViewPainter.doPaint(Unknown Source)
at com.sun.javafx.tk.quantum.AbstractPainter.paintImpl(Unknown Source)
at com.sun.javafx.tk.quantum.PresentingPainter.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at com.sun.prism.render.RenderJob.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)我认为解决方案必须是虚拟化画布。我认为这在概念上类似于ListView的实现方式。
请向我指出,您可能知道的任何例子,是类似于这个或任何网页,可能提供指导。(虚拟和虚拟化似乎不是搜索这个主题的有用关键字)
谢谢
发布于 2015-01-12 14:09:04
我们面临着同样的问题。关于为什么会发生这种情况的解释如下:https://community.oracle.com/thread/3549359
我们使用以下JVM参数解决了绕过显卡的问题:
-Dprism.order=sw
您可能也希望使用-Xmx来增加堆内存,因为它将使用更多的内存。
https://stackoverflow.com/questions/26226401
复制相似问题