title: JavaFX throws ArrayIndexOutOfBoundsException
body: <p>I'm experimenting with JavaFX labels and Groups with moving them over the screen by mouse dragging. New nodes are added to the animation group from some Threads.
  However, sometimes I see the following exception out of the sudden - I assume, when some nodes are overlapping. But I don't know what the problem is... because my code is not involved. Does anybody know this exception and root cause (using JDK 1.8.0.-112)?
  Thanks</p>
  
  <pre><code>'JavaFX Application Thread' lambda$main$68 - Thread[JavaFX Application Thread,5,main] threw an uncaught exception: java.lang.ArrayIndexOutOfBoundsException: -1
      at java.util.ArrayList.elementData(ArrayList.java:418) ~[?:1.8.0_112]
      at java.util.ArrayList.get(ArrayList.java:431) ~[?:1.8.0_112]
      at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89) ~[jfxrt.jar:?]
      at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306) ~[jfxrt.jar:?]
      at javafx.scene.Parent.updateCachedBounds(Parent.java:1591) ~[jfxrt.jar:?]
      at javafx.scene.Parent.recomputeBounds(Parent.java:1535) ~[jfxrt.jar:?]
      at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) ~[jfxrt.jar:?]
      at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078) ~[jfxrt.jar:?]
      at javafx.scene.Node.updateGeomBounds(Node.java:3579) ~[jfxrt.jar:?]
      at javafx.scene.Node.getGeomBounds(Node.java:3532) ~[jfxrt.jar:?]
      at javafx.scene.Node.getLocalBounds(Node.java:3480) ~[jfxrt.jar:?]
      at javafx.scene.Node.updateTxBounds(Node.java:3643) ~[jfxrt.jar:?]
      at javafx.scene.Node.getTransformedBounds(Node.java:3426) ~[jfxrt.jar:?]
      at javafx.scene.Parent.getChildTransformedBounds(Parent.java:1732) ~[jfxrt.jar:?]
      at javafx.scene.Parent.updateCachedBounds(Parent.java:1596) ~[jfxrt.jar:?]
      at javafx.scene.Parent.recomputeBounds(Parent.java:1535) ~[jfxrt.jar:?]
      at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388) ~[jfxrt.jar:?]
      at javafx.scene.Node.updateGeomBounds(Node.java:3579) ~[jfxrt.jar:?]
      at javafx.scene.Node.getGeomBounds(Node.java:3532) ~[jfxrt.jar:?]
      at javafx.scene.Node.getLocalBounds(Node.java:3480) ~[jfxrt.jar:?]
      at javafx.scene.Node.impl_intersectsBounds(Node.java:5015) ~[jfxrt.jar:?]
      at javafx.scene.Parent.impl_pickNodeLocal(Parent.java:705) ~[jfxrt.jar:?]
      at javafx.scene.Node.impl_pickNode(Node.java:4914) ~[jfxrt.jar:?]
      at javafx.scene.Scene$MouseHandler.pickNode(Scene.java:3899) ~[jfxrt.jar:?]
      at javafx.scene.Scene$MouseHandler.access$1600(Scene.java:3485) ~[jfxrt.jar:?]
      at javafx.scene.Scene.pick(Scene.java:1942) ~[jfxrt.jar:?]
      at javafx.scene.Scene.access$6700(Scene.java:159) ~[jfxrt.jar:?]
      at javafx.scene.Scene$MouseHandler.process(Scene.java:3799) ~[jfxrt.jar:?]
      at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) ~[jfxrt.jar:?]
      at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) ~[jfxrt.jar:?]
      at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) ~[jfxrt.jar:?]
      at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) ~[jfxrt.jar:?]
      at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) ~[jfxrt.jar:?]
      at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_112]
      at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) ~[jfxrt.jar:?]
      at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) ~[jfxrt.jar:?]
      at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) ~[jfxrt.jar:?]
      at com.sun.glass.ui.View.handleMouseEvent(View.java:555) ~[jfxrt.jar:?]
      at com.sun.glass.ui.View.notifyMouse(View.java:937) ~[jfxrt.jar:?]
      at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) ~[jfxrt.jar:?]
      at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) ~[jfxrt.jar:?]
      at java.lang.Thread.run(Thread.java:745) [?:1.8.0_112]
  </code></pre>
  
  <p>I assume, it has something to do with the Label (=BorderPane) adding method. I introduced it to shorten the Java FX Application thread processing time. Is there a problem with that?</p>
  
  <pre><code>private Queue&lt;BacklogGroupAction&gt; todoList = new ConcurrentLinkedQueue&lt;&gt;();
  
  class BacklogGroupAction {
      boolean add;
      boolean visibleState;
      BorderPane dv;
  
      public BacklogGroupAction(boolean add, boolean visibleState, BorderPane dv) {
          this.add = add;
          this.visibleState = visibleState;
          this.dv = dv;
      }
  
  }
  
  private synchronized void processBacklogGroupList() {
      if (Platform.isFxApplicationThread()) {
          while (!todoList.isEmpty()) {
              BacklogGroupAction p = todoList.poll();
              if (p.add) {
                  p.dv.setVisible(p.visibleState);
                  backlogGroup.getChildren()
                  .add(p.dv);
              } else
                  backlogGroup.getChildren()
                  .remove(p.dv);
          }
          backlogGroup.applyCss();
          backlogGroup.layout();
      } else
          logger.error("This is not FX Application Thread");
  }
  </code></pre>