进度条更新导致JavaFX崩溃

3

我在JavaFX(jdk 1.8.0_91)的应用程序中遇到了一个相当严重的错误,其中显示并更新了几个进度条(随机或同时)。有时,在进度条填充时(它有一个进度条样式类),但有时也会在无事发生时,软件会阻止,我多次出现这个跟踪(不总是相同数量,但最后一次是27次):

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 com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89)

at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306)

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.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.gtk.GtkApplication._runLoop(Native Method)

at com.sun.glass.ui.gtk.GtkApplication.lambda$null$49(GtkApplication.java:139)

at java.lang.Thread.run(Thread.java:745)

接下来会跟着27个迹象,然后出现大量这样的信息:

在“JavaFX应用程序线程”中发生异常java.lang.ArrayIndexOutOfBoundsException

由于异常堆栈跟踪中没有我的代码迹象,我有点迷失。有人知道这可能来自哪里吗?


1
由于没有代码,我们在这里能做的最好只是随机猜测。你能否创建一个能够复现问题的[MCVE]呢?否则,我最好的随机猜测是你正在尝试从后台线程访问UI。我的下一个猜测是你在ListChangeListener中处理列表变化时修改了一个可观察列表。但目前所有这些都只是猜测。 - James_D
我偶尔也会遇到同样的问题,但很少发生。 - glmxndr
1个回答

2
如果UI的修改不在JavaFX线程上,这个问题就非常普遍。不幸的是,在这种情况下,你会得到一个数组越界异常,而且没有真正的线索可以确定问题发生的位置。
另请参见(搜索结果为“ObservableListWrapper.java:89”):

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接