Cryptic exception when drawing in huge canvas

Kevin Rushforth kevin.rushforth at oracle.com
Thu Nov 8 23:25:49 UTC 2018


There is already a bug filed on this:

https://bugs.openjdk.java.net/browse/JDK-8089835

Yes, a more meaningful error message would be useful.

-- Kevin


On 11/8/2018 11:35 AM, Selim Dincer wrote:
> Hey,
>
> this morning I was doing something with the canvas control and got its size
> wrong. It was way taller than I expected and I had an NPE somewhere in
> NGCanvas but I didn't really understand what was wrong because nothing was
> pointing to my code. I don't know how it behaves on linux, I was running
> Windows 10.
>
> A minimal example looks like following:
>
> import javafx.application.Application;
> import javafx.scene.Scene;
> import javafx.scene.canvas.Canvas;
> import javafx.scene.image.Image;
> import javafx.scene.layout.BorderPane;
> import javafx.stage.Stage;
>
> public class CanvasTest extends Application {
>      @Override
>      public void start(Stage primaryStage) throws Exception {
>          Canvas canvas = new Canvas(128, 10000);
>          Image img = new
> Image("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png");
>          canvas.getGraphicsContext2D().drawImage(img, 0, 0, 128, 128);
>
>          primaryStage.setScene(new Scene(new BorderPane(canvas)));
>          primaryStage.show();
>      }
> }
>
> The StackTrace of the NPE looks like following:
> java.lang.NullPointerException
> at com.sun.javafx.sg.prism.NGCanvas$RenderBuf.validate(NGCanvas.java:213)
> at com.sun.javafx.sg.prism.NGCanvas.initCanvas(NGCanvas.java:640)
> at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:603)
> 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.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:748)
>
> I guess you might have to make the canvas a little larger than that to
> reproduce it on your system. I was creating the canvas as graphic of a
> listcell and didn't realize that it was so large until I started debugging
> (in this example the stage height indicates that something's wrong).
> Maybe there should be a check with a more meaningful error message?
>
> Thanks,
> Selim



More information about the openjfx-dev mailing list