ArrayIndexOutOfBoundsException when disconnecting screen

Marius Hanl mariushanl at web.de
Wed Feb 23 11:35:34 UTC 2022


   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


More information about the openjfx-dev mailing list