2012-02-29 23 views
6

Tôi là một lập trình viên C và chỉ học một số java gần đây vì tôi đang phát triển một ứng dụng Android. Hiện tại tôi đang ở trong một tình huống. Sau đây là một.Làm thế nào để tuyên truyền một ngoại lệ trong java

public Class ClassA{ 

public ClassA(); 

public void MyMethod(){ 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    catch(ExceptionType2 Excp2){ 
    //Here I want to show one alert Dialog box for the exception occured for the user. 
    //but I am not able to show dialog in this context. So I want to propagate it 
    //to the caller of this method. 
    } 
    } 
} 

Bây giờ tôi muốn sử dụng phương thức MyMethod() ở một nơi khác trong lớp khác. Nếu một số người có thể cung cấp cho tôi một số đoạn mã để truyền bá ngoại lệ cho người gọi MyMethod() để tôi có thể hiển thị chúng trong một hộp thoại trong phương thức người gọi.

Xin lỗi Nếu tôi không quá rõ ràng và kỳ lạ trong cách đặt câu hỏi này.

+1

Xem thêm http://stackoverflow.com/questions/409563/best-prac tices-for-exception-management-in-java-hoặc-c-sharp – mglauche

Trả lời

20

Chỉ cần đừng bắt ngoại lệ ở nơi đầu tiên, và thay đổi phương pháp kê khai của bạn để nó có thể tuyên truyền cho họ:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // Some code here which can throw exceptions 
} 

Nếu bạn cần phải thực hiện một số hành động và sau đó Tuyên truyền, bạn có thể rethrow it:

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    try { 
     // Some code here which can throw exceptions 
    } catch (ExceptionType1 e) { 
     log(e); 
     throw e; 
    } 
} 

1 Ở đây ExceptionType2 không bị phát hiện - nó sẽ tự động lan truyền tự động. ExceptionType1 bị bắt, đăng nhập và sau đó bị gỡ xuống.

Đó là không một ý tưởng tốt để có khối catch mà chỉ rethrow một ngoại lệ - trừ khi có một lý do tế nhị (ví dụ như để ngăn chặn một khối catch tổng quát hơn từ xử lý nó), bạn nên thường chỉ loại bỏ các khối catch thay .

0

Chỉ rethrow ngoại trừ

throw Excp1;

Bạn sẽ cần phải thêm các loại ngoại lệ đối với việc kê khai MyMthod() như thế này

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

    try{ 
    //Some code here which can throw exceptions 
    } 
    catch(ExceptionType1 Excp1){ 
     throw Excp1; 
    } 
    catch(ExceptionType2 Excp2){ 
     throw Excp2; 
    } 
} 

Hoặc chỉ cần bỏ qua try ở tất cả vì bạn không còn xử lý các trường hợp ngoại lệ, trừ khi bạn đặt thêm một số mã trong các câu lệnh khai thác làm những việc với ngoại lệ trước khi thực hiện lại nó.

2

Không nắm bắt và thử lại lần nữa. Chỉ cần làm điều này và bắt nó ở vị trí mà bạn muốn

public void myMethod() throws ExceptionType1, ExceptionType2 { 
    // other code 
} 

Ví dụ

public void someMethod() { 
    try { 
     myMethod(); 
    } catch (ExceptionType1 ex) { 
     // show your dialog 
    } catch (ExceptionType2 ex) { 
     // show your dialog 
    } 
} 
0

tôi luôn luôn làm điều đó như thế này:

public void MyMethod() throws Exception 
{ 
    //code here 
    if(something is wrong) 
     throw new Exception("Something wrong"); 
} 

sau đó khi bạn gọi hàm

try{ 
    MyMethod(); 
    }catch(Exception e){ 
    System.out.println(e.getMessage()); 
}