Почему при вызове метода он говорит, что мне нужно перехватить исключение, когда я его уже перехватил?
У меня есть класс, который зацикливает аудио:
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
Класс работает, когда работает сам по себе. Почему я не могу позвонить из другого класса?
3 ответа
Вы объявили свой main
в PlayGameMusic
бросать Exception
, Даже если ничего в этом методе на самом деле не бросает Exception
вне метода вы должны его перехватить или объявить в вызывающем методе, например RunGame.main
,
Потому что вы ловите исключения в PlayGameMusic.main
Вам не нужно заявлять, что он что-то выбрасывает. В PlayGameMusic
, менять:
public static void main(String[] args) throws Exception
в
public static void main(String[] args)
Если метод вызывает другой метод, который явно выбрасывает Exception, то вызывающий метод должен перехватить это Exception или объявить, что он выбрасывается в собственной сигнатуре метода.
https://docs.oracle.com/cd/A97339_01/doc/bc4j/BC4JRuntimeFiles/obcExceptions.htm
Если PlayGameMusic.main
не могу бросить Exception
это не должно быть объявлено с throw Exception
, Это не должно иметь throw Exception
только потому, что он может генерировать и ловить Exception
,