Hello,
I recently encountered a few issue reports that had an exception that
looks like this:
java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 0
at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
at
jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
at java.util.Objects.checkIndex(Objects.java:365)
at java.util.ArrayList.get(ArrayList.java:428)
at javafx.scene.Scene$DnDGesture.handleExitEnter(Scene.java:3578)
at
javafx.scene.Scene$DnDGesture.processTargetEnterOver(Scene.java:3473)
at javafx.scene.Scene$DropTargetListener.dragOver(Scene.java:3229)
at
com.sun.javafx.tk.quantum.GlassSceneDnDEventHandler.handleDragOver(GlassSceneDnDEventHandler.java:113)
at
com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleDragOver$0(GlassViewEventHandler.java:717)
at
com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:429)
at
com.sun.javafx.tk.quantum.GlassViewEventHandler.handleDragOver(GlassViewEventHandler.java:716)
at com.sun.glass.ui.View.handleDragOver(View.java:721)
at com.sun.glass.ui.View.notifyDragOver(View.java:1062)
at
com.sun.glass.ui.gtk.GtkDnDClipboard.mimesFromSystem(GtkDnDClipboard.java)
at
com.sun.glass.ui.SystemClipboard.getMimeTypes(SystemClipboard.java:84)
at
com.sun.glass.ui.ClipboardAssistance.getMimeTypes(ClipboardAssistance.java:140)
at
com.sun.javafx.tk.quantum.QuantumClipboard.hasContent(QuantumClipboard.java:454)
at javafx.scene.input.Clipboard.hasContent(Clipboard.java:274)
at
io.xpipe.app.browser.BrowserSessionTabsComp.lambda$createTab$10(BrowserSessionTabsComp.java:519)
at
com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
at
com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at
com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:232)
at
com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:189)
at
com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at
com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at
com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:199)
at javafx.scene.Scene$DnDGesture.handleExitEnter(Scene.java:3585)
at
javafx.scene.Scene$DnDGesture.processTargetEnterOver(Scene.java:3473)
at javafx.scene.Scene$DropTargetListener.dragOver(Scene.java:3229)
at
com.sun.javafx.tk.quantum.GlassSceneDnDEventHandler.handleDragOver(GlassSceneDnDEventHandler.java:113)
at
com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleDragOver$0(GlassViewEventHandler.java:717)
at
com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:429)
at
com.sun.javafx.tk.quantum.GlassViewEventHandler.handleDragOver(GlassViewEventHandler.java:716)
at com.sun.glass.ui.View.handleDragOver(View.java:721)
at com.sun.glass.ui.View.notifyDragOver(View.java:1062)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(GtkApplication.java)
at
com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$0(GtkApplication.java:242)
at java.lang.Thread.run(Thread.java:1474)
This happens in code where a drag event handler checks the system
clipboard. I noticed in the stack trace that is says:
at com.sun.glass.ui.View.notifyDragOver(View.java:1062)
at
com.sun.glass.ui.gtk.GtkDnDClipboard.mimesFromSystem(GtkDnDClipboard.java)
at
com.sun.glass.ui.SystemClipboard.getMimeTypes(SystemClipboard.java:84)
at
com.sun.glass.ui.ClipboardAssistance.getMimeTypes(ClipboardAssistance.java:140)
where GtkDnDClipboard.mimesFromSystem is a native method
(https://github.com/openjdk/jfx/blob/cfa34e61534c71442591f011c921b62efedbfadd/modules/javafx.graphics/src/main/native-glass/gtk/GlassSystemClipboard.cpp#L594)
I did not see any calls within this method to another one that could
possibly jump into the method
com.sun.glass.ui.View.notifyDragOver(View.java:1062). Now, I am not a
JNI expert, so I have to ask here: How can it happen that the stack
looks like this? Am I missing something in the method?