2017-05-10 61 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)不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

相關問題