.Jar 在 Windows 上运行良好但在 MAC 上抛出异常

.Jar runs fine on Windows but throws exception on MAC

我遇到了一个奇怪的问题,我什至无法正确使用我的异常堆栈跟踪,就像它看起来的那样!问题出在 JavaFX 方法本身。

这是我的用法:我正在创建一个 ObservableArrayList 并想在折线图中显示它。

这就是我创建/向 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.access00(XYChart.java:93)
at javafx.scene.chart.XYChart$Series.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)

(异常中提到的第129行是我清除现有ObservableList的地方)。

我自己没有使用任何索引,所以我真的不明白为什么会抛出 IndexOutOfBoundsException。

期待您的建议:)

问候,绝对不是专业编码员;)

正如Roland所说,"solved"问题是table整体禁用动画。

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

我想这只是一个警告。它现在工作正常。感谢大家看,也感谢罗兰

希望这有时能对某人有所帮助。 问候