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