I get an ArrayIndexOutOfBoundsException sometimes when I disconnect my screen(s). Setup: I have a laptop with a docking station attached. The docking station is connected to two screen, so when I disconnect it 2 screen will be 'lost'.
The following stacktrace is visible and the application is completely black and unresponsive: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at com.sun.prism.d3d.D3DPipeline.getD3DResourceFactory(D3DPipeline.java:21 7) at com.sun.prism.d3d.D3DPipeline.getResourceFactory(D3DPipeline.java:284) at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.validate(PPSRenderer. java:101) at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PP SRenderer.java:221) at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PP SRenderer.java:67) at com.sun.scenario.effect.Effect.getCompatibleImage(Effect.java:479) at com.sun.javafx.sg.prism.NodeEffectInput.getImageDataForBoundedNode(Node EffectInput.java:228) at com.sun.javafx.sg.prism.NodeEffectInput.filter(NodeEffectInput.java:131 ) at com.sun.scenario.effect.FilterEffect.filter(FilterEffect.java:185) at com.sun.scenario.effect.Offset.filter(Offset.java:160) at com.sun.scenario.effect.Merge.filter(Merge.java:148) at com.sun.scenario.effect.DelegateEffect.filter(DelegateEffect.java:70) at com.sun.scenario.effect.impl.prism.PrEffectHelper.render(PrEffectHelper .java:166) at com.sun.javafx.sg.prism.EffectFilter.render(EffectFilter.java:61) at com.sun.javafx.sg.prism.NGNode.renderEffect(NGNode.java:2384) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2069) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1964) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:270) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2072) ... ( a lot of doRender(..), renderContent(..) calls... ) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:480) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:329) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java: 92) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors .java:515) at java.base/java.util.concurrent.FutureTask.runAndReset$$$capture(FutureT ask.java:305) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolE xecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPool Executor.java:628) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumR enderer.java:126) at java.base/java.lang.Thread.run(Thread.java:829) ----------------------------------------------------------------------- ------------------------------------------------------- Now my question: A naive fix would be an array check here but does someone has more information about the code here? And more interesting: Is there a way to write tests for this? Maybe with simulating/faking screens and then 'faking' a screen disconnect? -- Marius