I have implemented a "candle stick chart" using the JavaFX canvas API. I have transitioned from using the charts API because after experimenting heavily with the chart API I came to the conclusion that for a (auto)-zooming, scrolling, and dynamically updated chart with various graphical indicators with *precise* control the canvas API better fit my needs. My implementation relies on the following canvas API methods:
beginPath, clip, clearRect, closePath, fill, lineTo, moveTo, restore, rect, save, setFont, setFill, setStroke, setLineWidth, stroke, strokeRect, and strokeText. Sometimes I run into the following exception when the chart is being rendered, but a second attempt at rendering (which is triggered by, for example, scrolling or zooming the chart) always makes it work again. This exception is seen only rarely and I have not been able to come up with a simplified test case that exhibits the error in a deterministic fashion, unfortunately. I realize that the likelihood of being able to fix the error with only the stack trace is slim, but I thought I may as well give a report of it just in case (and was encouraged by the fact that the entire code-path starts and stays inside the JavaFX code base (i.e. none of my code is actually present in the stack trace). Here is the full stack trace: java.nio.BufferOverflowException at com.sun.javafx.sg.prism.GrowableDataBuffer.ensureReadCapacity(GrowableDataBuffer.java:317) at com.sun.javafx.sg.prism.GrowableDataBuffer.getInt(GrowableDataBuffer.java:527) at com.sun.javafx.sg.prism.GrowableDataBuffer.getFloat(GrowableDataBuffer.java:563) at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:957) at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:606) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:477) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:323) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) java.lang.InternalError: Unrecognized PGCanvas token: 67 at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1157) at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:606) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:477) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:323) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) java.lang.InternalError: Unrecognized PGCanvas token: 107 at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1157) at com.sun.javafx.sg.prism.NGCanvas.renderForcedContent(NGCanvas.java:626) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:332) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) java.lang.ClassCastException: com.sun.prism.paint.Color cannot be cast to com.sun.javafx.font.PGFont at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1000) at com.sun.javafx.sg.prism.NGCanvas.renderForcedContent(NGCanvas.java:626) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:332) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) java.lang.ClassCastException: com.sun.javafx.font.PrismFont cannot be cast to java.lang.String at com.sun.javafx.sg.prism.NGCanvas.handleRenderOp(NGCanvas.java:1361) at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1097) at com.sun.javafx.sg.prism.NGCanvas.renderForcedContent(NGCanvas.java:626) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.sg.prism.NGGroup.renderForcedContent(NGGroup.java:198) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:332) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) java.lang.ClassCastException: com.sun.prism.paint.Color cannot be cast to java.lang.String at com.sun.javafx.sg.prism.NGCanvas.handleRenderOp(NGCanvas.java:1361) at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1097) at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:606) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2294) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2188) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2214) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2047) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:477) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:330) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.lang.Thread.run(Thread.java:745) Thanks very much, and sorry for not being able to provide a replicable test case. -- Michael Ennen