Я получаю исключение в основном потоке ... даже когда я обрабатываю исключение - PullRequest
1 голос
/ 11 апреля 2010
public KalaGame(KeyBoardPlayer player1,KeyBoardPlayer player2)
 {   //super(0);
 int key=0;
 try
 {

     do{
     System.out.println("Enter the number of stones to play with: ");

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        key = Integer.parseInt(br.readLine());  


    if(key<0 || key>10)
  throw new InvalidStartingStonesException(key);
  }
 while(key<0 || key>10);
    player1=new KeyBoardPlayer();
   player2 = new KeyBoardPlayer(); 
   this.player1=player1;
   this.player2=player2;
   state=new KalaGameState(key);



 }


    catch(IOException  e)
    {
       System.out.println(e);
      }
     } 

при вводе неверного числа камней я получаю эту ошибку

Исключение в потоке "main". InvalidStartingStonesException: Количество начальных камней должно быть больше 0 и меньше или равно 10 (попытка 22)

почему исключение не обрабатывается броском, который я определил в

KalaGame.<init>(KalaGame.java:27) at PlayKala.main(PlayKala.java:10)

Ответы [ 4 ]

5 голосов
/ 11 апреля 2010

Вы обрабатываете только IOException, но не исключение, которое выдается, т.е. InvalidStartingStonesException.

1 голос
/ 11 апреля 2010

Вы можете перехватить несколько типов исключений и соответственно отфильтровать их:

try
{
 // ...
}
catch(IOException ioe)
{
 // ...
}
catch(Exception ex)
{
 // ...
}

Вы можете добавить этот последний блок catch для соответствия любому исключению.

0 голосов
/ 11 апреля 2010

Блок catch (IOException) не перехватывает исключение, поскольку InvalidStartingStonesException не является ни IOException, ни его потомком.

Ваше исключение является непроверенным исключением , как и IllegalArgumentException. Компилятор не обязывает программиста отлавливать такие исключения, поскольку они обычно представляют ошибки, а не ситуации, которые могут быть обработаны.

Поскольку исключение не перехватывается, оно распространяется до конца стека вызовов основного потока, пока ваша программа не завершится.

0 голосов
/ 11 апреля 2010

Звучит так, как будто его обрабатывает бросок. Вызывая throw, вы говорите Java: «выйдите из программы и распечатайте InvalidStartingStonesException». Похоже, это то, что происходит. Если у вас было следующее:

catch(InvalidStartingStonesException{
   // code to handle the exception goes here
}

Тогда программа запустит ваш код обработки ошибок. Если это исключение расширило IOException, у вас уже есть ловушка, которая будет печатать исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...