try-catch (Wie erzwing ich die catch-Anweisung)?

Status
Nicht offen für weitere Antworten.

Mariell

Mitglied
hallo,

folgendes:
ich hab ein Eingabefeld, wo ich überprüfe, ob die Felder gefüllt wurden oder nicht.

Code:
try{
				//Überprüfung ob alle (*)Felder ausgefüllt wurden
				if(jtName.equals("")||jtVorname.equals("")||jtStrasse.equals("")||jtNr.equals("")||
						jtPLZ.equals("")||jtStadt.equals(""))
				{
					return;
				}
}catch(Exception e)
{
    System.out.print("Bitte alle Felder ausfüllen");
}

wie schaffe ich es, in der if-Abfrage, die catch-Anweisung zu erzwingen?

Momentan würde ja nichts passieren...
 
B

bygones

Gast
generell per

Code:
throw new Exception("BLABBLA");

aber ich halte die vorgehensweise für unsinnig... warum nicht gleich in der if abfrage einfach die Ausgabe machen "falsch", warum extra eine exception schmeißen ?
 

Mariell

Mitglied
der Grund ist, weil ich nachfolgende try-Anweisung habe, die sich dann nicht ausführen sollen
ok ich poste mal den gesamten code

Code:
try{
				//Überprüfung ob alle (*)Felder ausgefüllt wurden
				if(jtName.equals("")||jtVorname.equals("")||jtStrasse.equals("")||jtNr.equals("")||
						jtPLZ.equals("")||jtStadt.equals(""))
				{
					throw new Exception("test");

				}
					try
					{
						int i = 0;
						i = Integer.parseInt(jtNr.getText());
						try
						{
							i = Integer.parseInt(jtPLZ.getText());
							try
							{
								newKunde[1] =  jtName.getText();
								newKunde[2] =  jtVorname.getText();
								newKunde[3] =  jtStrasse.getText();
								newKunde[4] =  jtNr.getText();
								newKunde[5] =  jtPLZ.getText();
								newKunde[6] =  jtStadt.getText();
								newKunde[7] =  jtEMAIL.getText();
								newKunde[8] =  ta.getText();
								
								dbwein.kundenINSERT(newKunde);
								
								frameWein f1 = new frameWein(dbwein);
								f1.setVisible(true);
								
								fwein.dispose();
							}catch(Exception e3)
							{
								JOptionPane.showMessageDialog(null, "Error", "Fehler", JOptionPane.ERROR_MESSAGE);								
							}
						}catch(Exception e2)
						{
							JOptionPane.showMessageDialog(null, "Bitte bei PLZ nur Zahlen eingeben", "Fehler", JOptionPane.ERROR_MESSAGE);
							jtPLZ.setText("");
							jtPLZ.requestFocus();
						}
					}catch(Exception e1)
					{
						JOptionPane.showMessageDialog(null, "Bitte bei HausNr nur Zahlen eingeben", "Fehler", JOptionPane.ERROR_MESSAGE);
						jtNr.setText("");	
						jtNr.requestFocus();
					}
			}catch(Exception e)
			{
				JOptionPane.showMessageDialog(null, "Bitte alle (*)Felder eintragen", "Fehler", JOptionPane.ERROR_MESSAGE);
			}


leider geht er hier bei der ersten try-Anweisung nicht raus... was mach ich falsch?
 

AlArenal

Top Contributor
Da gruselts ja gewaltig...

Exceptions benutzt man doch nicht um Eingaben zu verifizieren. Das ist Aufgabe der Programmlogik und Logik hat etwas mit Wahrheitsaussagen zu tun, also mit if-else, switch-case, ...
Eine Exception stellt eine Ausnahme im Sinne eines nicht durch die Programmlogik abgebildeten / beeinflussbaren Ereignisses dar. Wenn ein Datenträger voll ist, wenn eine Datei nicht geschrieben werden kann, wenn ein Objekt null ist (und man das nicht abgefangen hat), wenn der Speicher alle ist - sprich, wenn das Programm einen nicht definierten Zustand einnimmt.

Abgesehen davon ist es in einer Rich-Client-Anwendung doch deutlich benutzerfreundlicher gewisse Forderungen des Programms an die Einhaben des Users direkt bei der Eingabe zu prüfen. Dafür nutzt man eben Listener. So kann das Programm direkt Feedback abgeben. Ich finds auch immer nervig, wenn man erst reichlich Eingaben macht und nem Programm erst am Ende einfällt, dass das was nicht ganz koscher ist.
 

Mariell

Mitglied
ok, stimmt. sicherlich nicht die eleganteste Lösung.
Aber wenns funktioniert...

Oder siehst du da noch andere Nachteil wenn ich die Exceptions dazu missbrauche?
 

AlArenal

Top Contributor
Mariell hat gesagt.:
Oder siehst du da noch andere Nachteil wenn ich die Exceptions dazu missbrauche?

Klar. Ich z.B. habe wenig Bock jemandem Support zu leisten der so dermaßen von hinten durch die Brust ins Auge schießen möchte. Wenn du es dir unnötig schwer machen möchtest, kannste nicht viel Hilfe erwarten, denn in solch krude Logik möchte ich mich gar nicht erst reindenken müssen.

Wenn ich den Code sehe schreit er mir zu "Lösch mich! Mach mich neu! Ich will schön sein!". :)
 

Bleiglanz

Gesperrter Benutzer
AlArenal hat gesagt.:
Mariell hat gesagt.:
Oder siehst du da noch andere Nachteil wenn ich die Exceptions dazu missbrauche?
Wenn ich den Code sehe schreit er mir zu "Lösch mich! Mach mich neu! Ich will schön sein!". :)

hoffentlich wird er erhört, sowas sollte nie das Licht der Welt erblicken


Nachteil1: es ist zu komplex, schlecht lesbar, und du verstehst deinen code ja selber schon nichtmehr; sonst hättest du ja hier nicht gefragt

Nachteil2: weil du immer den supertyp Exception auffängst, hast du keine Chance mehr eine "echte" Exception in deinem code abzufangen oder zu erkennen [stattdessen wird der user belästigt]

Nachteil3: weil Ausnahmen nur selten auftreten, verzichten die meisten JVMs darauf den catch-Teil besonders zu optimieren

Nachteil4: das ganze ist völlig schräg, jeder bessere Programmierer wird dich auslachen, wenn du mit sochem Code daherkommst

Nachteil5: schau mal den allerinnersten block an (e3): du hast im catch KEINE chance mehr zu erkennen, welches feld falsch war oder was schiefgegangen ist, jetzt musst du e3 parsen (auch mist) usw. dem user einfach "FEHLER" zu melden ist absolut vorsintflutlich
 
G

Gast

Gast
mir fällt nur ein: Exzentriker!

Sag' mal nach was für einem Lehrbuch arbeitest du?
 
B

bygones

Gast
Gast hat gesagt.:
mir fällt nur ein: Exzentriker!

Sag' mal nach was für einem Lehrbuch arbeitest du?
falls du Bleiglanz meinst, so ist er über jedem Lehrbuch erhaben :wink:

alle seine Punkte stimmen und sind zu Folge zu leisten (as always....)
 

Dreezard

Bekanntes Mitglied
mir fällt nur ein: Exzentriker!

Also programmierer muss man Exzentriker sein. Außer du verspürst den tiefen (unverständlichen) Wunsch Programmierer bei Microsoft zu werden.
Ich programmiere lieber etwas gleich richtig anstatt haufenweise Patches nachzuwerfen (ok Bei einem OS ist das schon schwer, aber was MS da abgeliefert hat.... ok ich vertief mich da jetzt nicht weiter).
Ich denke auch nicht, dass du mit solchem Spaghetti-Code anfängst weil du auf guten code keinen Wehrt legst, es irgendwann klick macht und du Plötzlich was wirklich lesbares schreibst.
 

aquanox

Mitglied
Und nun hacken sie auf ihm herum, anstatt ihm zu sagen wie es besser wär.

Code:
    // Überprüfung ob alle (*)Felder ausgefüllt wurden
    if(jtName.equals("") || jtVorname.equals("") || jtStrasse.equals("") || jtNr.equals("") || jtPLZ.equals("") || jtStadt.equals(""))
    {
      JOptionPane.showMessageDialog(null, "Bitte alle (*)Felder eintragen", "Fehler", JOptionPane.ERROR_MESSAGE);
    }
    else
    {
      try
      {
        Integer.parseInt(jtNr.getText());

        try
        {
          Integer.parseInt(jtPLZ.getText());
          
          newKunde[1] = jtName.getText();
          newKunde[2] = jtVorname.getText();
          newKunde[3] = jtStrasse.getText();
          newKunde[4] = jtNr.getText();
          newKunde[5] = jtPLZ.getText();
          newKunde[6] = jtStadt.getText();
          newKunde[7] = jtEMAIL.getText();
          newKunde[8] = ta.getText();

          dbwein.kundenINSERT(newKunde);

          frameWein f1 = new frameWein(dbwein);
          f1.setVisible(true);

          fwein.dispose();
        }
        catch(NumberFormatException e2)
        {
          JOptionPane.showMessageDialog(null, "Bitte bei PLZ nur Zahlen eingeben", "Fehler", JOptionPane.ERROR_MESSAGE);
          jtPLZ.setText("");
          jtPLZ.requestFocus();
        }
      }
      catch(NumberFormatException e1)
      {
        JOptionPane.showMessageDialog(null, "Bitte bei HausNr nur Zahlen eingeben", "Fehler", JOptionPane.ERROR_MESSAGE);
        jtNr.setText("");
        jtNr.requestFocus();
      }
    }

So und jetzt sagt mir noch jemand wie man schnell einen String auf Zahl überprüft. Am einfachsten ist doch das parsen mit try/catch. Reguläre Ausdrücke lass ich jetzt mal außen vor, wobei ich für solche Abfragen eine eigene Methode schreiben würde
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
K Zweifacher Try-Catch Allgemeine Java-Themen 6
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
I Exceptions - weder catch- noch finally-Klausel funktioniert Allgemeine Java-Themen 12
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
T rießiger try - catch - Block Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben