我遇到了一个奇怪的问题,我甚至无法正常使用我的Exception堆栈跟踪,因为它看起来像!问题是在JavaFX方法本身中产生的。
这是我的用法:我创建一个ObservableArrayList并希望在LineChart中显示它。
这就是我用数据创建/提供我的ObservableArrayList的方法:
public void showDetails(Spieler selected)
{
ObservableList<Data<String, Number>> epData = FXCollections.observableArrayList();
ObservableList<Data<String, Number>> tpData = FXCollections.observableArrayList();
ObservableList<Data<String, Number>> awpData = FXCollections.observableArrayList();
for (int i = 0; i < selected.getEp().size(); i++)
{
String currentDateVal = selected.getEinsaetze().get(i).toString();
epData.add(new Data<String, Number>(currentDateVal, selected.getEp().get(i)));
tpData.add(new Data<String, Number>(currentDateVal, selected.getTp().get(i)));
int curAwp = m.calculateAWP(selected.getEp().get(i), selected.getTp().get(i));
awpData.add(new Data<String, Number>(currentDateVal, curAwp));
}
dv.setData(epData, tpData, awpData, selected, m.getBenoetigteAWP(selected.getCurrentStaerke() + 1));
}
和我的SetData(最终抛出异常)如下所示:
public void setData(ObservableList<Data<String, Number>> epData, ObservableList<Data<String, Number>> tpData, ObservableList<Data<String, Number>> awpData, Spieler selected, int benoetigt)
{
if(epChart.getData() != null)
{
epChart.getData().clear();
epChart.setData(null);
}
if(tpChart.getData() != null)
{
tpChart.getData().clear();
tpChart.setData(null);
}
if(awpChart.getData() != null)
{
awpChart.getData().clear();
awpChart.setData(null);
}
epChart.setData(epData);
tpChart.setData(tpData);
awpChart.setData(awpData);
[... some Label formatting and stuff]
}
现在的事情是,它在我的IDE或我编译的可运行Jar中运行正常,一切正常。 但是当我的一个朋友(我正在编写这个小工具)在OSX上使用它时,它会引发以下异常:
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at javafx.scene.chart.XYChart$Series.getItem(XYChart.java:1628)
at javafx.scene.chart.LineChart.dataItemRemoved(LineChart.java:305)
at javafx.scene.chart.XYChart.dataItemsChanged(XYChart.java:497)
at javafx.scene.chart.XYChart.access$2300(XYChart.java:93)
at javafx.scene.chart.XYChart$Series$1.onChanged(XYChart.java:1457)
at com.sun.javafx.collections.ListListenerHelper$SingleChange.fireValueChangedEvent(ListListenerHelper.java:164)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
at javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
at javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
at javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
at javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
at com.sun.javafx.collections.ObservableListWrapper.clear(ObservableListWrapper.java:157)
at soccerCharts.detail.DetailView.setData(DetailView.java:129)
at soccerCharts.detail.DetailPresenter.showDetails(DetailPresenter.java:43)
(Exception中提到的第129行是清除现有ObservableList的地方。)
我自己没有使用任何指数,所以我真的不知道,为什么它会抛出IndexOutOfBoundsException。
期待您的建议:)
关心,绝对不是专业编码员;)
答案 0 :(得分:0)
就像Roland所说的那样,“解决了”整个桌子上禁用动画的问题。
table.setAnimated(false);
异常停止我现在收到的全部是
Mär 16, 2015 6:17:08 AM com.sun.javafx.scene.control.skin.VirtualFlow addTrailingCells
INFO: index exceeds maxCellCount. Check size calculations for class javafx.scene.control.TableRow
我猜这只是一个警告。它现在工作正常。感谢大家的关注,感谢罗兰。
希望这会有时帮助某人。 问候