2017-04-05 1 views
1

Ich versuche, meine eigenen Ausnahmen in Java zu machen.Eigene Ausnahmen machen Java

Ich habe eine Elternklasse wie:

public class PException extends Exception { 
    public PException(String msg) { 
     super(msg); 
    } 
} 

und zwei Kinder Klassen wie:

public class noGoalException extends PException { 
    public noGoalException(){ 
     super("No Goal"); 
    } 
} 

ich es so nennen:

im Haupt:

try { 
    Starter s = new Starter("res/init"); 
} catch (PException e) { 
    e.getMessage(); 
} 

und in m y Methode:

private void parseGoals() throws PException { 
    [...] 
    if (i == 0) { 
     throw new noGoalException(); 
    } 
} 

und Starter:

public Starter(String fileName) throws GPException { 
    [...] 
    parseGoals(); 
} 

I angeben, dass i = 0 für die Tests.

Das Problem ist, dass meine Ausnahme in nie wirft. Stimmt irgendetwas nicht ?

Vielen Dank für Ihre Hilfe.

+2

Beachten Sie, dass 'e.getMessage();' nichts selbst drucken wird, versuchen Sie 'e.printStackTrace()'. – Berger

+2

Sie müssen 'System.out.println (e.getMessage());' anstelle von 'e.getMessage()' –

+0

@Kayaman ja i = 0 für mmy Tests verwenden – iAmoric

Antwort

1

Wie @Berger auch messungen in einem Kommentar: statt e.getMessage() tun entweder:

try { 
    Starter s = new Starter("res/init"); 
} catch (PException e) { 
    System.out.println(e.getMessage()); 
} 

oder

try { 
    Starter s = new Starter("res/init"); 
} catch (PException e) { 
    e.printStackTrace(); 
} 

Wenn das immer noch nicht druckt etwas mehr Code geben Sie bitte Ihre wo i herkommt So können wir überprüfen, warum der Fehler nicht ausgelöst wird.

+0

Oh ja, es ist meine Schuld Ich habe System.out.println() vergessen .. Aber selbst mit e.printStackTrace() passiert nichts – iAmoric

+0

Es funktioniert mit System.out.println (e.getMessage()). – iAmoric

0

hier Dies ist nicht korrekt und ist der Grund, warum Sie nichts sehen, wenn die Ausnahme

try { 
    Starter s = new Starter("res/init"); 
} catch (PException e) { 
    e.getMessage(); 
} 

e.getMessage()returns a String geworfen wird, und das ist gerade in dem Stapel

statt Sie zu verirren:

System.out.println(e.getMessage()); 

im Fang

oder rufen Sie einfach an e.printStackTrace()