【问题标题】:try-catch not working properlytry-catch 无法正常工作
【发布时间】:2016-10-14 06:29:23
【问题描述】:

我正在阅读 HeadFirst 的 Java。我开始阅读有关异常处理的章节。书中有我在电脑上执行的代码。

import javax.sound.midi.*;
class PlayMusic
{
    public void play()
    {
        try{
            Sequencer sq = MidiSystem.getSequencer();
            System.out.println("We got a sequencer");
        }
        catch(MidiUnavailableException ex)
        {   
            System.out.println("Bummer!");  
            ex.printStackTrace();
        }
    }
    public static void main(String[] args)
    {
        PlayMusic pm = new PlayMusic();
        pm.play();
    }
}

当我删除 try-catch 块时,编译器会引发 MidiUnavailableException 错误。我使用 try-catch 来捕获该异常,但 System.out.println("Bummer"); 没有被执行。而是执行 try 块。

这里发生了什么?

【问题讨论】:

  • 您应该继续阅读或阅读this tutorialcatch 块仅当当且当执行。提出了一个配件Exception。编译器确实抱怨,因为您根本没有捕获异常(编译器无法知道在执行时是否引发了 Exception)。

标签: java try-catch javax.sound.midi


【解决方案1】:

当您遇到编译器错误时,这意味着该方法可能抛出一个MidiUnavailableException。运行时是抛出异常的时候,如果操作成功,则不会进入catch 块。如果您有一个finally 块,则 保证要输入。

【讨论】:

    【解决方案2】:

    MidiUnavailableException 是一个检查异常,因此您需要包含 catch 块才能编译代码。但是,不能保证在您的程序执行时实际会抛出异常。在您的情况下,它没有被抛出,因此您的 try 块中的代码正常执行,并且您的错误打印输出永远不会被调用。

    【讨论】:

    • 所以,你的意思是每当我使用getSequencer() 方法时,我都需要将它包含在try-catch 块中,因为它可能会引发Exception
    • 是的,或者声明封闭方法抛出异常(在本例中为“play”方法)。
    猜你喜欢
    • 1970-01-01
    • 2011-12-25
    • 2013-04-15
    • 1970-01-01
    • 2018-01-02
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多