使用哪个Exception类?

时间:2014-01-19 02:54:16

标签: java exception

我用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
        }              
    }

2 个答案:

答案 0 :(得分:2)

如果您不确定需要捕获的异常,请转到相应方法的文档。事实证明constructor of Media会抛出MediaException - 这是您需要捕获的例外情况。向下滚动到“throws”部分,查找 not extend RuntimeException的异常(运行时异常通常表示编程错误;需要捕获这种情况很少见)。

当您决定在程序的特定级别捕获异常时,请查看您的代码是否可以对其执行有意义的操作。你不应该捕捉异常,除非你知道什么时候抓住它们。

答案 1 :(得分:1)

这段代码毫无意义。

您的catch阻止为空,没有。你的方法说它抛出NoMatchException。为什么不消除try / catch并让它这样做呢?

当您有可行的恢复策略时,您会捕获异常。什么都不做不是一种策略。只是让它冒出来让呼叫者处理它。

如果确实有可行的恢复策略,请在catch块中实现它,并从方法签名中删除throws子句。两者之一,但不是两者。

相关问题