Почему блок catch выполняется дважды для одного исключения? - PullRequest
2 голосов
/ 22 октября 2009

У меня есть следующий код.

try{
    Twitter twitter = new Twitter(user,password);
    twitter.setStatus(txtStatus.getText());

    JOptionPane.showMessageDialog(null, "Success");
    txtStatus.setText("");
    txtStatus.requestFocus();

}catch(Exception e){
    JOptionPane.showMessageDialog(null, "Some Error.\n" +
                    " If you see this after Success Message..Ignore");
}

Здесь, даже после того, как я получаю диалог «Успешное сообщение», также появляется диалоговое окно «Некоторые ошибки». в чем может быть причина? Не должно ли управление потоком выйти из блока catch, если не было ошибок времени выполнения.

Даже если я получаю исключение, диалоговое окно «Некоторые ошибки» появляется дважды. Почему это происходит?

Ответы [ 7 ]

8 голосов
/ 22 октября 2009

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

2 голосов
/ 22 октября 2009

Посмотрите на Исключение, которое вы ловите, и на его трассировку стека, и вы можете быть просветленным.

Мое предположение: txtStatus равно нулю после вашего первого диалога, или это метод requestFocus(), который вызывает исключение.

1 голос
/ 22 октября 2009

Попробуйте напечатать стопку e.printStackTrace() - после сообщения об успехе может возникнуть исключение (например, NullPointerException с txtStatus?)

1 голос
/ 22 октября 2009

Ваш код может быть вызван дважды. Попробуйте поместить оператор System.out.println вверху кода или запустить его в отладчике и убедитесь, что он вызывается только один раз.

0 голосов
/ 22 октября 2009

И я тоже добавлю два цента.

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

Отладчик - твой друг: -)

0 голосов
/ 22 октября 2009

Я согласен с Atomice здесь: ваш код вызывается несколько раз. Добавьте блок finally + более заметный отзыв об ошибке.

try{
    Twitter twitter = new Twitter(user,password);
    twitter.setStatus(txtStatus.getText());

    JOptionPane.showMessageDialog(null, "Success");
    txtStatus.setText("");
    txtStatus.requestFocus();

}
catch(Exception e){
    JOptionPane.showMessageDialog(null, "Some Error.\n" + e.getMessage());
}
finally {
    JOptionPane.showMessageDialog(null, "Finally");
}
0 голосов
/ 22 октября 2009

Исключение можно добавить в одну из этих двух строк:

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