2016-06-30 2 views
0

이 지난 몇 일 나에게 실행시 오류의 톤을 일으키는 원인이되었다 - 내가 추가 한 것을 기억하지listView.getSelectionModel(). getSelectedIndex()가 -1을 반환하는 이유는 무엇입니까?

동시 수정 예외 널 포인터 예외가 있지만,이 부분에 코드 스 니펫 (snippet)을 추가 그리고 배열 예외를 벗어났습니다. 예외가 발생하면 null 포인터 포인터 예외의 맨 위에 음수 인덱스가 throw됩니다. 예외가 발생하면 viewList에 아무 것도 없을 때 throw됩니다.

왜 이렇게하고 있습니까? 나는 방금 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

왜 '비즈니스 카드'를 목록에서 가져 옵니까? 'newVal'가 이미 그 값 (또는'null')을 포함하고있는 것처럼 보입니다, 당신이'ListView'를 가지고 정말 이상한 일을하지 않는다면 ... – fabian

답변

3

여기서는 documentation for the selectedIndex property이 꽤 분명하다고 생각합니다.

선택 모델에서 현재 선택된 색인 값 을 나타내는 데 사용되는 선택된 색인 특성을 나타냅니다. 선택된 색인은 선택 사항이 없음을 나타 내기 위해 -1이거나 기본 데이터 모델 크기의 범위 내에있는 정수 값입니다.

관련 문제