0

我有一个循环一些音频的类:

public class PlayGameMusic {
    public static void main(String[] args) throws Exception {
        try{
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("\\Users\\natal\\Desktop\\programs\\APCS\\Fill the Boxes.wav"));
            Clip clip = AudioSystem.getClip();
            clip.open(inputStream);
            clip.loop(Clip.LOOP_CONTINUOUSLY);
            Thread.sleep(10000);
        }
        catch(IOException error){System.out.println("IO Exception Error");}
        catch(InterruptedException error){System.out.println("InterruptedException");}
        catch(Exception error){System.out.print("System.out.println("Exception");");}
     }
}

我可以编译这个方法并且编译器不会报告任何错误(我已经用 print 语句测试过)。PlayGameMusic但是,当我尝试在另一个类中调用上述类()的主要方法时......

public class RunGame
{
    public static void main(String[] args)
    {
       PlayGameMusic.main(null);
    }
}

...我得到这个编译器错误:

unreported exception java.lang.Exception; must be caught or declared to be thrown

我正在捕获可能的异常,并且PlayGameMusic该类在自己运行时可以正常工作。为什么我不能从另一个班级调用它?

4

3 回答 3

6

你已经宣布你的mainin PlayGameMusicto throw Exception。即使该方法中没有实际抛出Exception该方法,您也必须捕获它或在调用方法中声明它,例如RunGame.main.

因为您正在捕获 中的异常PlayGameMusic.main,所以您不需要声明它会抛出任何东西。在PlayGameMusic中,改变:

public static void main(String[] args) throws Exception

public static void main(String[] args)
于 2018-06-08T00:29:16.423 回答
1

如果一个方法调用另一个显式抛出异常的方法,那么调用方法应该捕获该异常或在自己的方法签名中声明它被抛出

https://docs.oracle.com/cd/A97339_01/doc/bc4j/BC4JRuntimeFiles/obcExceptions.htm

于 2018-06-08T02:54:00.747 回答
0

如果PlayGameMusic.main不能抛出Exception它不应该用throw Exception. 它不应该throw Exception仅仅因为它可以生成和捕获 Exception

于 2018-06-08T00:29:34.413 回答