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

时间:2015-03-14 11:07:15

标签: java macos javafx cross-platform

我遇到了一个奇怪的问题,我甚至无法正常使用我的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。

期待您的建议:)

关心,绝对不是专业编码员;)

1 个答案:

答案 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

我猜这只是一个警告。它现在工作正常。感谢大家的关注,感谢罗兰。

希望这会有时帮助某人。 问候