我有一个相当大的JavaFX应用程序,它在大多数情况下运行良好。 但是,有时候在单击应用程序时会得到随机的ArrayIndexOutOfBoundsExceptions。我无法重现错误并且不知道它们何时出现:有时我可以毫无问题地点击应用程序,有时应用程序崩溃并出现堆栈跟踪。
Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:418)
at java.util.ArrayList.get(ArrayList.java:431)
at javafx.scene.Parent.updateCachedBounds(Parent.java:1591)
at javafx.scene.Parent.recomputeBounds(Parent.java:1535)
at javafx.scene.Parent.impl_computeGeomBounds(Parent.java:1388)
at javafx.scene.layout.Region.impl_computeGeomBounds(Region.java:3078)
at javafx.scene.Node.updateGeomBounds(Node.java:3577)
at javafx.scene.Node.getGeomBounds(Node.java:3530)
at javafx.scene.Node.getLocalBounds(Node.java:3478)
at javafx.scene.Node.updateTxBounds(Node.java:3641)
at javafx.scene.Node.getTransformedBounds(Node.java:3424)
at javafx.scene.Node.updateBounds(Node.java:559)
at javafx.scene.Parent.updateBounds(Parent.java:1719)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Parent.updateBounds(Parent.java:1717)
at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2404)
at com.sun.javafx.tk.Toolkit.lambda$runPulse$30(Toolkit.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:354)
at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:381)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:510)
at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:490)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$404(QuantumToolkit.java:319)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
at java.lang.Thread.run(Thread.java:745)
在阅读堆栈跟踪时,唯一引起我注意的是在我的一些代码中甚至没有发生错误。 你是否有人知道这样的问题并且有想法,我可以在哪里开始调查或者可能导致这个问题的原因?
我在JDK 1.8.0_74(Windows 8.1 x64),JDK 1.8.0_77(Windows 8.1 x64)和JDK 1.8.0_91(OS X 10.11)上尝试过它
答案 0 :(得分:1)
由于我是JavaFX的新手,我可能错了,但在编写游戏时遇到了同样的问题。我的问题是我试图从与#34; JavaFX Application Thread"不同的线程中移动对象。由于您还没有提供您的代码,我无法确定,但我建议您仅通过" JavaFX应用程序线程"对GUI进行任何更改。那应该解决它。
答案 1 :(得分:0)
解决这个问题的最好方法是查看所有数组声明,然后检查它们中的任何一个是否是动态访问的,这样可能会导致索引超出范围。
如果您可以在应用程序中引入日志记录,则可以引入调试logs (log.debug(myArray.size() + arrayAccessVariable) )
检查GUI的输入是否正在初始化任何阵列(常见的错误来源)。
我认为在你的情况下,它被-1访问。一个好的做法是在每次访问之前引入否定检查。
另一个好主意是使用ArrayList
或任何其他数据类型,可以在需要时自行调整大小。