2014-10-06 46 views
2

我的应用程序有一个ScrollPane包含的非常大的Canvas。JavaFX2中的非常大的画布

在约10万像素的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的实现类似。

请向我指出您可能知道的与本文或任何可能提供指导的页面相似的任何示例。 (虚拟和虚拟化似乎并没有有所帮助关键字谷歌上搜索这个话题)

谢谢

+1

使用最近的JavaFX;例如8u20有一些错误修正:[RT-36571重新启用DirectX 9Ex以避免在表面丢失时丢失纹理](https://javafx-jira.kenai.com/browse/RT36571)。查看相关的论坛讨论:[画布渲染与大小成比例地下降](https://community.oracle.com/thread/3549359)和[ControlsFX GridView](http://controlsfx.bitbucket.org/org/controlsfx /control/GridView.html)(与[eppleton TileEngine](http://jayskills.com/blog/2013/01/09/writing-a-tile-engine-in-javafx/)不同)不是画布具体)。 – jewelsea 2014-10-07 00:30:23

+0

这些都是很好的链接。谢谢。 – 2014-10-08 05:50:48

回答

4

我们面临着同样的问题。 为什么会发生的解释,是在这里:https://community.oracle.com/thread/3549359

我们解决了绕过视频卡的问题,使用以下JVM参数:

-Dprism.order=sw

您可能需要增加堆内存以及使用 - Xmx,因为它会使用更多的内存。