2017-05-10 5 views
0

저는 사용자가 JList에서 선택한 항목을 기반으로 이미지에 다른 기호가 그려지는 프로그램을 작성하고 있습니다. 이 잘 작동하지만 내 문제는 JList에서 선택되지 않은 경우 이미지에 기호를 배치하려는 것입니다. 선택 사항이 비어 있는지 확인하는 방법이 있습니까? 이것은 지금 내 코드이며 JList에서 아무 것도 선택하지 않으면 NullPointerException을 던졌습니다.Jlist에서 아무 것도 선택하지 않은 경우

if(categoriesList.getSelectedValue().equals("Bus")) { 
      BusSymbol bs = new BusSymbol(x, y); 
      mp.add(bs); 
     } 
     else if 
(categoriesList.getSelectedValue().equals("Underground")) { 
      UndergroundSymbol us = new UndergroundSymbol(x,y); 
      mp.add(us); 
     } 
     else if (categoriesList.getSelectedValue().equals("Train")) { 
      TrainSymbol ts = new TrainSymbol(x,y); 
      mp.add(ts); 
     } 
     else if (categoriesList.getSelectedValue().equals(null)) { 

      NoCategorySymbol ncs = new NoCategorySymbol(x,y); 
      mp.add(ncs); 
     } 

     mp.validate(); 
     mp.repaint(); 
+0

:

나는 다음과 같은 코드를 제안한다. 무언가가 null 일 가능성이 있다면,'== null' (또는 이상적으로는 다른 메소드와 함께 검사하고 싶습니다; API에 hasSelectedValue() 메소드가 없습니까?) – Aaron

답변

0

null 일 수있는 값을 테스트하는 대신 JList.isSelectionEmpty()을 조건으로 사용해야합니다. 이 구문을 피하고 대신 neverNull.equals(mightBeNull)를 사용하는 것이 일반적으로 더 일반적으로

mightBeNull.equals(neverNull) 

:

는 먼저이 시험을, 및/또는이 불행한 구문이 다른 모든 테스트를 변경해야 하나 존재하지 않는 null.equals() 메소드를 호출하려고하지 않기 때문입니다. null` 더`.equals` 방법이 없습니다`때문이다

if (categoriesList.isSelectionEmpty()) { 
    mp.add(new NoCategorySymbol(x,y)); 
} else { 
    // here we know categoriesList.getSelectedValue() isn't null 
    String selectedValue = categoriesList.getSelectedValue()); 
    if ("Underground".equals(selectedValue)) { 
     mp.add(new UndergroundSymbol(x,y)); 
    } else if ("Train".equals(selectedValue)) { 
     mp.add(new TrainSymbol(x, y)); 
    } 
} 
mp.validate(); 
mp.repaint(); 
+0

이것은 정확히 내가 필요로하는 것입니다. 완벽하게 작동합니다! 감사! – Andpej

+0

@Andpej 오신 것을 환영합니다. 문제가 해결 되었기 때문에 답변에 동의 함으로 표시하십시오. – Aaron

0

당신은 ==를 사용할 필요가 .equals을 사용하여 널 (null) 값을 확인할 수 없습니다.

categoriesList.getSelectedValue() == null 

.equals는 객체의 메소드를 호출하기 때문입니다. 객체가 null 인 경우는 그렇게 할 수 없습니다.

0
public boolean isElementSelected(){ return categoriesList.getSelectedValue() == null;} 
+1

몇 가지 즉각적인 도움을 줄 수있는이 코드 스 니펫을 이용해 주셔서 감사합니다. 적절한 설명은 * 왜 * 이것이 문제에 대한 좋은 해결책인지를 보여줌으로써 교육적 가치를 크게 향상시킬 것이며 (* meta.stackexchange.com/q/114762) 비슷한 미래의 독자들에게 더 유용하게 사용할 수 있습니다. 동일하지 않은 질문들. 설명을 추가하려면 답을 편집하고 어떤 제한 및 가정이 적용되는지 표시하십시오. –

관련 문제