2016-06-30 7 views
0

この過去数日間 のために私の実行時エラーのトンを引き起こしていた - 私は私が追加何を覚えていないなぜlistView.getSelectionModel()。getSelectedIndex()は-1を返しますか?

同時変更例外とNULLポインタ例外が、このセグメントでは、コードのスニペットを追加しました私はそれがヌーポインタの例外の上に負のインデックスをスローすることが判明私につながる範囲外の配列をスローしました。何もviewListに何もないときにスローします。

これはなぜですか?私は今週、javafxを使いこなし始めました。これが、私がどこかでうんざりしているに違いないと信じていますか?

ObservableList<BusinessCard> observableList = FXCollections.observableArrayList(); //initialized above 

    // ListView Listener, changes text fields for the selected B.C in ViewList 
    try { 
     listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<BusinessCard>() { 
      @Override 
      public void changed(ObservableValue<? extends BusinessCard> arg0, BusinessCard oldval,BusinessCard newVal) { 
       int index = listView.getSelectionModel().getSelectedIndex(); 

       if(index == -1) return; //Fix   

       BusinessCard card = observableList.get(index);      
       setDataFields(card);   
      } 
     }); 
    } catch (NullPointerException e1) { 
     // Do nothing, NullPointer thrown when list is empty 
    } 
+1

'observableList'とは何ですか?それはどこに定義されていますか? – niceman

+0

あなたのリストモデルには選択解除オプションがあり、そのイベントの 'BusinessCard newVal'は' null'であり、それに対応して 'listView.getSelectionModel()。getSelectedIndex()'は '-1'です。 – gevorg

+0

なぜあなたはリストから「ビジネスカード」を取得するのですか?あなたが 'ListView'で本当に奇妙なことをしていない限り、' newVal'が既にその値(または 'null')を含んでいるはずです。 – fabian

答えて

3

ここでは、documentation for the selectedIndex propertyはかなり明確だと思います。

選択モデルで現在選択されているインデックス値 を示すために使用される、選択されたインデックスプロパティを指します。選択された インデックスは、選択がないことを表す-1、または基礎となるデータモデル サイズの範囲内にある の整数値のいずれかです。

関連する問題