注册列表更改侦听器时出现异常

时间:2014-06-07 02:18:28

标签: java exception generics user-interface javafx

我刚刚将这段代码添加到我的列表程序中,我得到了一个例外。我不确定发生了什么,它避免了我用它调试的努力。具体而言,异常发生在新列表的分配上。 rankList是ListView<Rank>

 rankList.getItems().addListener(new ListChangeListener<Rank>() {
            @Override
            public void onChanged(ListChangeListener.Change<? extends Rank> c) {

                 List<? extends Rank> ranks = c.getAddedSubList();
                 Collections.sort(ranks, (Rank t, Rank t1)
                 -> Long.compare(t.getNumericalRankApproximation(),
                 t1.getNumericalRankApproximation()));
                 setValue(ranks.get(ranks.size()).getNumericalRankApproximation());
                 increment();
            }
        });

例外:

Caused by: java.lang.IllegalStateException: Invalid Change state: next() must be called before inspecting the Change.

1 个答案:

答案 0 :(得分:8)

您必须遍历传递给change方法的onChanged。有关详细信息,请参阅docs,但有点像

 rankList.getItems().addListener(new ListChangeListener<Rank>() {
            @Override
            public void onChanged(ListChangeListener.Change<? extends Rank> c) {
                 while (c.next()) {
                     if (c.wasAdded()) {
                         List<? extends Rank> ranks = c.getAddedSubList();
                         Collections.sort(ranks, (Rank t, Rank t1)
                         -> Long.compare(t.getNumericalRankApproximation(),
                         t1.getNumericalRankApproximation()));
                         setValue(ranks.get(ranks.size()).getNumericalRankApproximation());
                         increment();
                     }
                 }
            }
        });
相关问题