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?

Reply via email to