2013-11-27 23 views
1
try{ 
     IMAGE = ImageIO.read(getClass().getResource("Images/image.png")); 
    } 
    catch (IOException ex){ 
     JOptionPane.showMessageDialog(null, "<html>Error<br>Missing images</html>" ,"Error",JOptionPane.ERROR_MESSAGE); 
     System.exit(1); 
    } 

catch塊不工作,我仍然得到默認消息:的Java捕捉圖像未發現異常

Exception in thread "main" java.lang.IllegalArgumentException: input == null! 
at javax.imageio.ImageIO.read(Unknown Source) 
at KPK.<init>(KPK.java:40) 
at Main.main(Main.java:22) 

我怎麼能抓住這個exceptiont?

+0

只需要添加另外catch塊爲例外。 – OldProgrammer

+1

@OldProgrammer:不,這不是一個好主意。 –

+0

爲什麼每個人都建議他應該發現IllegalArgumentException?這個例外情況應該不會被發現,並且這樣做表明這個程序有一些錯誤。請鄉親們,讓我們給新手*好的建議。再次請參閱[這個問題](http://stackoverflow.com/questions/2117541/what-is-the-best-way-to-catch-an-illegalargumentexception)瞭解更多信息。 –

回答

3
  1. 首先,請勿漁獲IllegalArgumentException。這個錯誤表明你的代碼中有一些非常糟糕的東西,並且不應該被捕獲。請參閱Jon Skeet的回答here瞭解更多關於爲什麼這是不好的。相反,您應該:
  2. 在您讀取圖像的行中分隔代碼。
  3. 首先從getResource()
  4. 檢查得到的URL,如果它是空
  5. 如果空不叫ImageIO.read(...)它。
  6. 您應該學習並遵循Java命名約定,以便其他人更好地理解您的代碼。例如,不要使非常量變量大寫。

try{ 
    URL imgUrl = getClass().getResource(IMAGE_PATH); // path should be a constant 
              // or variable, not a String literal 
    if (imgUrl == null) { 
    // show error and get the heck out of here 
    } else { 
    image = ImageIO.read(imgUrl); 
    } 
} catch (IOException ex){ 
    JOptionPane.showMessageDialog(null, "<html>Error<br>Missing images</html>" , 
     "Error",JOptionPane.ERROR_MESSAGE); 
    System.exit(1); 
} 
-1

catch (IOException | IllegalArgumentException ex)

此外,創建圖像的第一... Image im = null;然後使用文件... im = ImageIO.read(new File("YOUR IMAGE FILE PATH"));

+1

「似乎」是嵌入式資源,而不是「文件」;) – MadProgrammer

+0

請參閱原始問題的評論。 -1 –

+0

是的,我同意這不是一個好主意......但是如果他真的想要使用catch塊,那麼爲什麼要阻止他呢? – iWumbo