2014-10-06 45 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,因爲它會使用更多的內存。