Frage zu try ... catch

myjday

Aktives Mitglied
Schönen guten Abend,

ich spiele gerade mit dem Verständnis zu try ... catch.

Dazu habe ich folgendes Problemchen kreiert. (JFrame mit JLabel, Jtxt, usw ...

Ein Benutzer möchte eine Datenmenge entweder auf CDs oder auf DVDs brennen. Die Auswahl trifft
er in eine JComboBox.
Als Meldung soll ausgegeben werden wie viele DVDs, bzw. CDs er benötigt.

Den Fall, dass der User keine Datenmenge eingibt wollte ich mit try ... catch abfangen.
Funktioniert aber nicht.

Hier der Quellcode, der ausgeführt werden sollte sobald der User den OK-Button drückt.

Java:
private JButton getJbtnOK() {
		if (jbtnOK == null) {
			jbtnOK = new JButton();
			jbtnOK.setBounds(new Rectangle(192, 46, 60, 20));
			jbtnOK.setText("OK");
			jbtnOK.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {

					// Start Eingabebereich

					int kapazitaetDVD = 4700;
					int kapazitaetCD =   700;

					String datentraeger1 = "CDs";
					String datentraeger2 = "DVDs";

					String meldung = "Bitte wählen Sie zuerst ein Medium aus";

					int speichermenge;

					try {
						speichermenge = Integer.parseInt(jtxtEingabe.getText());

					} catch (NumberFormatException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();

						meldung = "Sie haben keine Datenmenge eingegeben";
					}

					// Bestimmen der Ausgabe

					if (jcbbDVDCDAuswahl.getSelectedIndex() == 1) {

						if (berechneAnzahlDatentraeger(speichermenge,kapazitaetCD) == 1) {

							datentraeger1 = "CD";
						}

						meldung = "Sie benötigen " + berechneAnzahlDatentraeger(speichermenge,kapazitaetCD);
						meldung = meldung + " " + datentraeger1;
					}

					if (jcbbDVDCDAuswahl.getSelectedIndex() == 2) {

						if (berechneAnzahlDatentraeger(speichermenge,kapazitaetDVD) == 1) {

							datentraeger2 = "DVD";
						}

						meldung = "Sie benötigen "+ berechneAnzahlDatentraeger(speichermenge,kapazitaetDVD);
						meldung = meldung + " " + datentraeger2;
					}

					jlblAnzeige.setText(meldung);

					// Ende Eingabebereich
				}
			});
		}
		return jbtnOK;
	}

	public static int berechneAnzahlDatentraeger(int s, int k) {

		int anzahl = s / k;

		// Gibt es einen Rest?

		if (s % k != 0) {

			anzahl++;
		}

		return anzahl;

	}

Ohne try / catch funktioniert es.

Ideen? :noe:

Gruß,
myjday
 

Murray

Top Contributor
Kannst du uns noch verraten, was nicht funktioniert (Compile-Fehler, Exception zur Laufzeit oder unerwartetes Verhalten)?
 

myjday

Aktives Mitglied
nach meinem Verständnis ist es ein Compiler-Fehler.

OK, Eclipse meint dazu:

at a04_dvd_cd.A04_DVDCDOberflaeche.<init>(A04_DVDCDOberflaeche.java:157)
at a04_dvd_cd.A04_DVDCDOberflaeche$2.run(A04_DVDCDOberflaeche.java:145)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

In Zeile 157 ist der Konstruktoraufruf
in Zeile 145 wird das Objekt der Klasse versucht zu Erzeugen. Ist wahrscheinlich ein Folgefehler
zu Zeile 157.

Komischerweise (na ja - wahrscheinlich nur für mich) kennt er die lokale Variable speichermenge beim Methodenaufruf nicht mehr. Obwohl sie vor dem try / catch-Block deklariert wurde.

Gruß,
myjday
 

Murray

Top Contributor
Was du hier als Fehlermeldung postest, sieht ehe nach einem (allerdimngs unvollständigen) Laufzeitfehler aus.

Zur Variablen speichermenge: solche Konstrukte
Java:
int x;
try {
  x = ...
} catch ( Exception e) {
  ...
}
int y = f( x);
mag der Compiler nicht, weil x möglicherweise (nämlich dann, wenn vor der Zuweisung eine Exception aufgetreten ist) nicht initialisiert worden ist.
 
S

SlaterB

Gast
zum Verständnis:
der gepostete Stacktrace beschreibt einen Fehler zur Laufzeit, alle Zeilen gehören zusammen und zeigen alle offenen Methoden an hin zur Stelle des Fehlers,
die erste Zeile eines solchen StackTraces fehlt bei dir, da steht die wichtigste Information, hier evtl 'Unresolved Compilation Problem',
denn noch dürfte der Code wirklich keinen Sinn machen, siehe Tipp von eRaaaa
 

myjday

Aktives Mitglied
Ihr hattet recht. sobald ich die lokale Variable speichermenge mit 0 initialisiert hatte war der Compilerfehler vom Tisch.

Allerdings ist jetzt das eigentliche Problem noch nicht gelöst.

Wenn ich den Fall eines leeren Eingabefeldes ausprobiere erhalte ich einen Laufzeitfehler. Diesen
wollte ich eigentlich mit try / catch abfangen.

java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at a04_dvd_cd.A04_DVDCDOberflaeche$1.actionPerformed(A04_DVDCDOberflaeche.java:81)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
usw.


Den gleichen Laufzeitfehler erhalte ich auch wenn ich anstatt der erwarteten Ganzzahl einen double-Wert eintrage.

java.lang.NumberFormatException: For input string: "5.6"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at a04_dvd_cd.A04_DVDCDOberflaeche$1.actionPerformed(A04_DVDCDOberflaeche.java:81)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

Sind das überhaupt Laufzeitfehler?
Ich sollte vielleicht noch dazusagen, dass er die Zuweisung an den String meldung im catch-Block ausführt.

Sorry, aber gibt es für die entsprechenden möglich auftretenden Fehler bestimmte Kategorien, die man einzeln abfangen muss oder gibt es eine Exception stellvertretend für alle?

Gruß,
myjday
 

Schandro

Top Contributor
funktioniert doch alles. Der Code unter dem try-catch-Block wird normal ausgeführt. Du fängst die NumberFormatException erfolgreich ab.
Im catch-Block gibst du stackTrace dann aus. Deswegen sieht es für dich genauso aus, als würde die Excpetion nicht aufgefangen werden. Sie wird es aber... (kannst ja mal testweise ein System.out.println in den catch-Block und eins darunter schreiben...)
 
Zuletzt bearbeitet:

Tharsonius

Bekanntes Mitglied
die Methode parseInt() erwartet einen String, der eindeutig einen Integer enthält.
Ein leerer String ("") und ein String,d er wie ein double aussieht ("5.6") sind nunmal keine Integer und können keinesfalls in einen Integer gewandelt werden.

Die Folge ist eine Exception, die geworfen wird. Die Exception fängst Du mit Deiner catch Anweisung ab und da Du dir den StackTrace anzeigen lässt kommt es zu exakt dieser Ausgabe.



Meiner Meinung nach ist die Art und weise wie Du das ganze löst vollkommen unpraktisch. Du solltest die Eingabe vorweg prüfen, ob überhaupt ein Integer drin ist und bei eventuell fehlerhaften Zeichen eine Meldung ausgeben. Na ja, aber grundlegend funktioniert alles so wie Du es programmiert hast.

Und selbstverständlich wird die Meldung gesetzt. Es ist halt ein Laufzeitfehler, den Du abfängst und behandelst. Dadurch läuft das Programm normal weiter. Musst halt nur bedenken, dass der Integer nicht erzeugt wurde. Eine folgende Rechenoperation kann also eventuell zu weiteren Fehlern führen.



Bezüglich der auftretenden Fehler, es gibt verschiedene Exceptions, die man gesondert abfangen und auch gesondert handhaben kann. In Deinem Fall ist das immer die NumberFormatException. Es ist aber möglich, dass in größeren Blöcken verschiedene Fehler auftreten können. Die kann man dann gesondert behandeln (sollte man auch), aber theoretisch ists möglich das allgemein abzufangen. Ein "catch (Exception e)" würde jeden möglichen Fehler abfangen. Exception ist die Oberklasse aller Fehler.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
I Frage zu Try - Catch - Finally Java Basics - Anfänger-Themen 10
C Frage zu try - catch (saubere Lösung?) Java Basics - Anfänger-Themen 3
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
J Try-Catch-Frage Java Basics - Anfänger-Themen 13
D Frage try and catch Java Basics - Anfänger-Themen 7
J Frage zum Quellcode - Zusammhänge und Ablauf. Java Basics - Anfänger-Themen 2
D Erste Schritte Frage eines absoluten Anfängers Java Basics - Anfänger-Themen 3
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
H Frage zum Array Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben