2012-06-09 2 views
9

Я работаю над своим первым проектом Java, реализующим класс под названием «HeartRates», который берет дату рождения пользователя и возвращает максимальный и целевой пульс. Все в основной тестовой программе работает, кроме одного, я не могу понять, как остановить остальную часть кода от печати после исключения.Исключение обнаружено, но программа продолжает работать

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

Вот код:

import java.util.Scanner; 
import java.util.GregorianCalendar; 

import javax.swing.JOptionPane; 

public class HeartRatesTest { 

public static void main(String[] args) { 
    HeartRates test= new HeartRates(); 
    Scanner input = new Scanner(System.in); 
    GregorianCalendar gc = new GregorianCalendar(); 
    gc.setLenient(false); 

     JOptionPane.showMessageDialog(null, "Welcome to the Heart Rate Calculator");; 
     test.setFirstName(JOptionPane.showInputDialog("Please enter your first name: \n")); 
     test.setLastName(JOptionPane.showInputDialog("Please enter your last name: \n")); 
     JOptionPane.showMessageDialog(null, "Now enter your date of birth in Month/Day/Year order (hit enter after each): \n"); 

     try{ 
      String num1= JOptionPane.showInputDialog("Month: \n"); 
      int m= Integer.parseInt(num1); 
      test.setMonth(m); 
       gc.set(GregorianCalendar.MONTH, test.getMonth()); 
      num1= JOptionPane.showInputDialog("Day: \n"); 
      m= Integer.parseInt(num1); 
      test.setDay(m); 
       gc.set(GregorianCalendar.DATE, test.getDay()); 
      num1= JOptionPane.showInputDialog("Year: \n"); 
      m= Integer.parseInt(num1); 
      test.setYear(m); 
       gc.set(GregorianCalendar.YEAR, test.getYear()); 

       gc.getTime(); // exception thrown here 
     } 

     catch (Exception e) { 
      e.printStackTrace(); 
      } 



    String message="Information for "+test.getFirstName()+" "+test.getLastName()+": \n\n"+"DOB: "+ test.getMonth()+"/" +test.getDay()+ "/" 
      +test.getYear()+ "\nAge: "+ test.getAge()+"\nMax Heart Rate: "+test.getMaxHR()+" BPM\nTarget Heart Rate(range): "+test.getTargetHRLow() 
      +" - "+test.getTargetHRHigh()+" BPM"; 
    JOptionPane.showMessageDialog(null, message); 
} 
+0

положить '' showMessageDialog' внутри попытаться {} 'блок –

ответ

13

Не совсем уверен, почему вы хотите прекратить действие приложения после исключения - не лучше ли исправить все, что пошло не так?

В любом случае, в вашем блоке поймать:

catch(Exception e) { 
    e.printStackTrace(); //if you want it. 
    //You could always just System.out.println("Exception occurred."); 
    //Though the above is rather unspecific. 
    System.exit(1); 
} 
+0

Спасибо, я сделал именно то, что искал. Я понимаю, что вы имеете в виду, и, вероятно, было бы лучше, но для целей этого проекта не требовалось исправлять ошибку, поэтому я оставляю его как есть. – Mike

9

В catch блоке, используйте ключевое слово return:

catch(Exception e) 
{ 
    e.printStackTrace(); 
    return; // also you can use System.exit(0); 
} 

или, может быть, вы хотите поставить последнюю JOptionPane.showMessageDialog в конце try блока.

+0

то, что разница между ... выход (0) и ... выход (1)? –

7

Это правда, что возвращение будет происходить, чтобы остановить выполнение этой программы (будучи в основном). Более общий ответ будет состоять в том, что если вы не можете обрабатывать определенный тип исключения в методе, вы должны либо объявить, что вы выбрали указанное исключение, либо вы должны перенести свое исключение с каким-то RuntimeException и выбросить его на более высокий уровень.

System.exit() также технически работает, но в случае более сложной системы, вероятно, следует избегать (ваш вызывающий может обрабатывать исключение).

Т.Л., версия др:

catch(Exception e) 
{ 
    throw new RuntimeException(e); 
} 
Смежные вопросы