2014-01-19 5 views
1

Я написал музыкальный плеер на 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

Если вы не знаете, какое исключение вам нужно поймать, перейдите к документации соответствующего метода. Оказывается, что constructor of Media выбрасывает MediaException - это исключение, которое вам нужно поймать. Прокрутите страницу вниз до раздела «броски» и найдите исключения, которые делают не extend RuntimeException (исключения во время выполнения обычно указывают на ошибки программирования, необходимость ловить это редко).

Когда вы решаете поймать исключение на определенном уровне вашей программы, посмотрите, может ли ваш код сделать что-то значимое. Вы не должны ловить исключения, если не знаете, что делать, когда их ловить.

+0

Спасибо за помощь! – SorenRomer

1

Этот код не имеет смысла.

Ваш catch блок пуст и делает ничего. Ваш метод говорит, что он выбрасывает NoMatchException. Почему бы вам не устранить попытку/уловку и не позволить ей это сделать?

Вы получаете исключения, когда у вас есть жизнеспособная стратегия восстановления. Ничего не делать - это не стратегия. Просто позвольте этому пузыриться и позволить вызывающему иметь дело с этим.

Если у вас есть жизнеспособная стратегия восстановления, реализуйте ее в блоке catch и удалите предложение throws из подписи метода. Либо один, либо другой, но не оба.

+0

Это пустая причина, я не стал писать, пока не знал, как заставить ее работать. В принципе, я просто хочу напечатать уведомление пользователю о том, что есть проблема с файлом, который она пытается воспроизвести. – SorenRomer

Смежные вопросы