2017-05-10 24 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'没有'.equals'方法。如果什么东西可能为空,你想用'== null'来检查它(或者理想情况下用另一种方法;在那个API上没有'hasSelectedValue()'方法吗?) – Aaron

回答

0

您应该使用JList.isSelectionEmpty()作为条件,而不是使用可能为null的值进行测试。

您应该使这个测试第一,和/或改变都具有这个不幸的语法其他测试:

mightBeNull.equals(neverNull) 

一般来说它是一般最好避免这种语法和使用neverNull.equals(mightBeNull)相反,因为它避免了试图调用不确定的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你需要使用==空值。

categoriesList.getSelectedValue() == null 

这是因为.equals在对象上调用方法。如果对象为空,则不能这样做。

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

感谢您使用此代码段,它可能会提供一些即时帮助。通过展示*为什么*这是一个很好的解决问题的方法,并且使它对未来的读者更有用,但是它的教育价值会得到很好的解释[//会大大提高](// meta.stackexchange.com/q/114762)不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –

相关问题