2014-01-19 45 views
1

我已經用Java寫了一個音樂播放器,但是我找到了拋出異常的問題。基本上,我想讓異常處理程序拋出的是如果存儲在播放列表中的歌曲的文件名被改變或者文件被刪除,那麼當然,在這種情況下它將不會播放。我首先想到的是一個IOException,我需要的,但它給我的錯誤說要使用哪個Exception類?

例外IOException,而從來沒有在相應的try語句

現在的身體拋出,我明白,這意味着我我正在使用錯誤的Exception類,所以我試圖編寫自己的擴展Exception,但是當我嘗試編譯時,它給了我同樣的錯誤。任何人都可以看到我做錯了什麼?

這是方法,因爲它是現在:

public void play() throws NoMatchException 
    { 
     if(player != null) { 
      player.stop(); 
     }  

     try{ 
      int fileToPlay = tracklist.getSelectedIndex(); 
      String filename = organizer.getFile(fileToPlay); 
      Media song = new Media(filename); 
      player = new MediaPlayer(song); 
      setVolume(currentVolume); 
      player.play(); 

      player.setOnEndOfMedia(new Runnable() { 
       @Override public void run() { next(); } 
      }); 
     } 
     catch (NoMatchException e){ 
      //Some exception 
     }    
    } 

回答

2

當您不確定需要捕捉什麼異常時,請轉到相應方法的文檔。事實證明,constructor of Media會拋出MediaException - 這是你需要捕捉的例外。向下滾動到「throws」部分,尋找而不是擴展RuntimeException的異常(運行時異常通常表示編程錯誤;需要捕捉這種情況很少見)。

當您決定在程序的特定級別捕獲異常時,請查看您的代碼是否可以對此做一些有意義的事情。除非你知道在什麼時候捕捉它們,否則你不應該捕捉異常。

+0

感謝您的幫助! – SorenRomer

1

這個代碼是沒有意義的。

您的catch區塊爲空,並且沒有任何區域。你的方法說它會拋出NoMatchException。你爲什麼不消除try/catch並讓它這樣做呢?

當您有一個可行的恢復策略時,您會捕獲異常。無所作爲不是一種策略。讓它冒泡,讓調用者處理它。

如果您確實有可行的恢復策略,請在catch塊中實施它,並從方法簽名中除去throws子句。無論是其中一個,但不是兩個。

+0

這是空的原因,直到我知道如何使它工作,我才懶得寫它。基本上,我只是想打印一條通知給用戶,說她正在嘗試播放的文件有問題。 – SorenRomer