我用Java编写了一个音乐播放器,但我遇到了查找抛出异常的问题。基本上,我希望异常处理程序抛出的是,如果存储在播放列表中的歌曲的文件名被更改,或者文件被删除,那么在这种情况下它将无法播放。我首先认为这是我需要的IOException,但它给了我错误说
异常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
}
}
答案 0 :(得分:2)
如果您不确定需要捕获的异常,请转到相应方法的文档。事实证明constructor of Media
会抛出MediaException
- 这是您需要捕获的例外情况。向下滚动到“throws”部分,查找 not extend RuntimeException
的异常(运行时异常通常表示编程错误;需要捕获这种情况很少见)。
当您决定在程序的特定级别捕获异常时,请查看您的代码是否可以对其执行有意义的操作。你不应该捕捉异常,除非你知道什么时候抓住它们。
答案 1 :(得分:1)
这段代码毫无意义。
您的catch
阻止为空,没有。你的方法说它抛出NoMatchException
。为什么不消除try / catch并让它这样做呢?
当您有可行的恢复策略时,您会捕获异常。什么都不做不是一种策略。只是让它冒出来让呼叫者处理它。
如果确实有可行的恢复策略,请在catch块中实现它,并从方法签名中删除throws子句。两者之一,但不是两者。