2012-06-09 41 views
9

Tôi đang làm việc trên dự án Java đầu tiên của mình triển khai một lớp có tên là "HeartRates", có ngày sinh của người dùng và trả về nhịp tim tối đa và mục tiêu của họ. Tất cả mọi thứ trong chương trình thử nghiệm chính hoạt động ngoại trừ một điều, tôi không thể tìm ra cách để ngăn chặn phần còn lại của mã từ in sau khi ngoại lệ bị bắt.Ngoại lệ bị bắt nhưng chương trình vẫn tiếp tục chạy

Tôi không thực sự chắc chắn về toàn bộ phần mã nơi ngoại lệ bị bắt vì nó được sao chép và dán từ những gì giáo sư đã cho chúng tôi. Nếu bất cứ ai có thể cho tôi biết làm thế nào để chấm dứt chương trình sau khi một lỗi xảy ra, hoặc in một thông báo lỗi tùy chỉnh và ngăn chặn chương trình thực hiện thêm tôi sẽ đánh giá cao nó.

Đây là mã:

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

đặt 'showMessageDialog' bên' try {} 'khối –

Trả lời

13

Không thực sự chắc chắn lý do tại sao bạn muốn chấm dứt ứng dụng sau khi ngoại lệ bị bắt - sẽ không tốt hơn nếu bạn sửa bất kỳ điều gì sai?

Trong mọi trường hợp, trong khối catch của bạn:

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

Cảm ơn bạn, điều này đã làm chính xác những gì tôi đang tìm kiếm. Tôi hiểu những gì bạn có ý nghĩa và nó có thể sẽ tốt hơn, nhưng vì mục đích của dự án này nó không được yêu cầu để cho phép sửa lỗi nên tôi để nó như vậy. – Mike

9

Trong khối catch, sử dụng từ khóa return:

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

hoặc có thể bạn muốn đặt trước JOptionPane.showMessageDialog ở phần cuối của khối try.

+0

chênh lệch giữa ... thoát là những gì (0) và ... exit (1)? –

7

Đúng là lợi nhuận sẽ xảy ra để ngăn chặn việc thực hiện chương trình này (là ở chính). Câu trả lời chung hơn sẽ là nếu bạn không thể xử lý một kiểu ngoại lệ cụ thể trong một phương thức, bạn nên tuyên bố rằng bạn ném ngoại lệ đã nói, hoặc bạn nên bọc ngoại lệ của bạn với một kiểu RuntimeException và ném nó lên lớp cao hơn.

System.exit() cũng hoạt động về mặt kỹ thuật, nhưng trong trường hợp hệ thống phức tạp hơn có thể tránh được (người gọi của bạn có thể xử lý ngoại lệ).

tl; dr phiên bản:

catch(Exception e) 
{ 
    throw new RuntimeException(e); 
} 
Các vấn đề liên quan