2012-02-29 13 views
6

Jestem programistą C i uczę się ostatnio trochę java, ponieważ opracowuję jedną aplikację na Androida. Obecnie jestem w sytuacji. Poniżej jest ten.Jak propagować wyjątek w java

Teraz mogę użyć wywołania metody MyMethod() gdzie indziej w innej klasie. Jeśli ktoś może podać mi jakiś fragment kodu, jak propagować wyjątki do wywołującego MyMethod(), aby móc wyświetlić je w oknie dialogowym w metodzie wywołującej.

Przepraszam, jeśli nie jestem tak jasny i dziwny w zadawaniu tego pytania.

+1

Zobacz także http://stackoverflow.com/questions/409563/best-praca sekcje-do-zarządzania-wyjątkami-w-java-or-c-sharp – mglauche

Odpowiedz

20

Tylko nie złapać wyjątek w pierwszej kolejności, i zmienić swoje oświadczenie metody tak, że może rozprzestrzeniać je:

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

Jeśli trzeba podjąć pewne działania i następnie rozprzestrzeniać, można przekaż go:

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

Tutaj ExceptionType2 nie podlega w ogóle - będzie to właśnie rozchodzą się automatycznie. ExceptionType1 zostaje schwytany, zalogowany, a następnie ponownie zgłoszony.

To nie to dobry pomysł, aby mieć bloków catch który tylko przekaż wyjątek - chyba że istnieje jakiś subtelny powód (na przykład w celu zapobieżenia bardziej ogólny blok catch z obchodzenia się z nim) należy zwykle po prostu wyjąć blok catch zamiast .

0

Wystarczy przekaż wyjątek

throw Excp1;

Trzeba będzie dodać typ wyjątku do deklaracji MyMthod() jak ten

public void MyMethod() throws ExceptionType1, ExceptionType2 { 

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

Albo po prostu pominąć try w ogóle, ponieważ nie są już obsługa wyjątków, chyba że wstawisz jakiś dodatkowy kod do instrukcji catch, robiąc rzeczy z wyjątkiem przed ponownym wysłaniem.

2

Nie łapaj go i ponownie rzuć. Wystarczy to zrobić i złapać go w miejscu, gdzie chcemy

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

Przykład

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

zawsze robię to tak:

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

wtedy kiedy wywołać funkcję

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