Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 09:25

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Throw in Lambda bzw. innere Klasse

Discussion on Throw in Lambda bzw. innere Klasse within the Java forum part of the Coders Den category.

Reply
 
Old   #1

 
MIZAN's Avatar
 
elite*gold: 129527
The Black Market: 603/1/0
Join Date: Sep 2010
Posts: 7,316
Received Thanks: 612
Throw in Lambda bzw. innere Klasse

Hallo,

ich sitze gerade an einer Aufgabe, wo bei einem Fehlschlag beim konvertieren des Inhalts der Textfelder in int-Werte, die Temperatur Exception geworfen werden soll.
Meine Idee war, dass ich die NumberFormatException auffange und im catch-Block die TemperaturException werfe.
Leider tritt dabei der Fehler auf:
"unreported exception TemperaturException; must be caught or declared to be thrown".
Als Vorschlag gab er mir, dass ich es in einen try-catch Block schreibe (siehe unten). Das sieht mir aber nicht ganz sauber aus. Gibt es eine bessere Lösung?


Zudem soll der Inhalt der Exception widergeben, in welchem Textfeld der Fehler liegt. Deswegen dachte ich, mache ich zwei try-catch Blöcke.

Code:
but.setOnAction(e->{
            try {
            int fahrenheit = Integer.parseInt(fah.getText());
        } catch(NumberFormatException en ) { 
            try {
            throw new TemperaturException("Bitte nur eine Zahl in Fahrenheit eingeben.");
                } catch (TemperaturException ex) {
                    ex.printStackTrace();
                }
        }
        
        try {
            int celsius = Integer.parseInt(cel.getText());
        } catch(NumberFormatException ef ) { 
                try {
                    throw new TemperaturException("Bitte nur eine Zahl unter Celsius ausgeben.");
                } catch (TemperaturException ex) {
                    ex.printStackTrace();
                }
        }
        });
MIZAN is offline  
Old 08/05/2017, 14:49   #2


 
Menan's Avatar
 
elite*gold: 0
The Black Market: 169/0/0
Join Date: Sep 2008
Posts: 9,484
Received Thanks: 3,109
@

Deine TemperatrException ist ja eine "custom" Exception.

Eventuell zeigst du noch deine Implementierung der Exception. Ich denke nämlich, dass du sie als normale Exception deklariert hast, welche deklariert (method throws TemperaturException) und/oder abgefangen werden muss.

Eine einfache Abhilfe wäre es, die Exception als RuntimeException zu deklarieren, dann fliegt sie einfach und der Stacktrace wird ausgegeben.
Menan is offline  
Thanks
1 User
Old 08/05/2017, 15:09   #3

 
MIZAN's Avatar
 
elite*gold: 129527
The Black Market: 603/1/0
Join Date: Sep 2010
Posts: 7,316
Received Thanks: 612
Quote:
Originally Posted by Menan View Post
@
Ich denke nämlich, dass du sie als normale Exception deklariert hast, welche deklariert (method throws TemperaturException) und/oder abgefangen werden muss.
Ist damit gemeint, dass hinter die Methode "throws TemperaturException" stehen muss?
Das hatte ich ja gemacht.
Ich zeig mal den ganzen Code.
Code:
public class CelsiusFahrenheit extends Application{

    [MENTION=295804]Override[/MENTION]
    public void start(Stage ps) throws TemperaturException {
        BorderPane bp = new BorderPane();
        TextField cel = new TextField();
        TextField fah = new TextField();
        Button but = new Button("OK");
        VBox vb = new VBox();
        vb.getChildren().addAll(cel,fah,but);
        
        but.setOnAction(e->{
            try {
            int fahrenheit = Integer.parseInt(fah.getText());
        } catch(NumberFormatException en ) { 
            throw new TemperaturException("Bitte nur eine Zahl in Fahrenheit eingeben.");
        }
        
        try {
            int celsius = Integer.parseInt(cel.getText());
        } catch(NumberFormatException ef ) { 
                try {
                    throw new TemperaturException("Bitte nur eine Zahl unter Celsius ausgeben.");
                } catch (TemperaturException ex) {
                    ex.printStackTrace();
                }

        }
        });
        
        bp.setCenter(vb);
        Scene scene = new Scene(bp);
        ps.setScene(scene);
        ps.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

So habe ich die custom Exception geschrieben.

Code:
public class TemperaturException extends Exception{
    
    public TemperaturException() {
        super();
    }
    
    public TemperaturException(String t) {
        super(t);
    }
}
Wenn ich die Exception als RuntimeException deklariere, klappt es.
Danke.

Ich habe aber noch nicht ganz verstanden, wieso es vorher bei mir nicht geklappt hat.
MIZAN is offline  
Old 08/05/2017, 15:22   #4


 
Menan's Avatar
 
elite*gold: 0
The Black Market: 169/0/0
Join Date: Sep 2008
Posts: 9,484
Received Thanks: 3,109
Ja, wenn du eine normale Exception deklarierst, dann muss die Exception entweder in der Methode abgefangen werden oder angegeben werden, dass diese Methode eine Exception werfen kann, dies wäre genau das "throws TemperaturException".
Allerdings muss diese Exception dann von der Methode, die diese Methode aufruft behandelt werden.

Eine RuntimeException kann zur Laufzeit auftreten (wie der Name schon sagt). Diese muss nicht, aber kann behandelt werden.

Eventuell solltest du dich nochmal mit dem Unterschied zwischen Exception und RuntimeException befassen

In deinem Fall sollte diese Exception eigentlich keine RuntimeException sein, da du ja ein Programm schreibst und diese Exception auf eine Fehlerhafte Eingabe hinweist. Also würdest du normalerweise diese Exception auffangen (catch) und z.B. eine Fehlermeldung ausgeben.
Wenn du nun allerdings wirklich nur den StackTrace möchtest, kannst du sie erstmal einfach als RuntimeException deklarieren und sparst dir nen bisschen Code.
@
Menan is offline  
Thanks
1 User
Old 08/06/2017, 17:00   #5

 
MIZAN's Avatar
 
elite*gold: 129527
The Black Market: 603/1/0
Join Date: Sep 2010
Posts: 7,316
Received Thanks: 612
Mir ist noch aufgefallen, dass mein erster Lösungsansatz (der im ersten Post) ausserhalb des Lambas funktioniert. Wieso funktioniert es nicht innerhalb?
MIZAN is offline  
Reply


Similar Threads Similar Threads
NEW Gate Lambda[PICTURE]
06/28/2012 - DarkOrbit - 42 Replies
Hello, i found in the German Forum a Picture of the new Lambda Gate. http://img16.imageshack.us/img16/2266/lambdagate4 .jpg But maybe this gate will only be on the American servers -.- What do you think about the gate? EDIT: Here i found the picture: http://de.board.bigpoint.com/darkorbit/showthread .php?t=1173064&page=5
[ Biete ] Ikariam - Lambda - 1.750.00 - viele Ressis ]
03/09/2012 - Browsergames Trading - 1 Replies
Topic. 9Städte , ca. 400k+ Forschungspunkte , 150HS , 40Mille Gold. Suche 10PSC oder sonstigen Stuff.
Innere oder Äußere Schönheit?
07/24/2011 - Off Topic - 58 Replies
Hallo also der Titel sagt alles. Stellt euch vor ihr habt die Wahl zwischen 2 folgenden Typen einer Frau/Mädchen: Würdet ihr lieber eine sehr hübsche Frau/Mädchen nehmen, mit der ihr zwar in der Öffentlichkeit prahlen könnt und die halt schön anzusehen aber die nen scheiß Charakter hat und die euch voll auf die Nerven geht
ich seh das innere meines wagens wtf
04/17/2011 - Need for Speed World - 0 Replies
hi ich habe mal ne frage und tzwar seit kurzem sehe ich ständig anstatt das heck meines wagens das innere wie kann das sein und wie kann ich es beheben.:confused:



All times are GMT +1. The time now is 09:26.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.