Ich habe eine einfache Anwendung, die es Benutzern ermöglicht, einen Divisor, einen Divident einzugeben und dann den Quotienten zu berechnen. Ich benutze Vaadin als Rahmen, aber ich denke nicht, dass das zählt. Also habe ich über die Ausnahmen nachgedacht, die auftreten können und das sind diejenigen, die ich identifiziert habe: -Division von 0: ArithmeticException; -Benutzer eine Zeichenfolge statt einer Zahl eingeben: InputMismatchException Hier ist die Klasse, die die Form und befasst sich mit den Ausnahmen erstellt:NumberFormatException: wie man damit umgeht
package my.vaadin.project.exceptionTest;
import java.awt.Component;
import java.util.InputMismatchException;
import com.vaadin.server.Page;
import com.vaadin.shared.Position;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Notification;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.event.Action;
public class Calculation extends CustomComponent{
final VerticalLayout vl = new VerticalLayout();
final TextField dividend = new TextField();
final TextField divisor = new TextField();
final TextField result = new TextField();
final Button resetButton = new Button("Reset");
private int divisionResult = 0;
Button button = new Button("Click Me");
public Calculation(){
dividend.setCaption("Enter the dividend:");
divisor.setCaption("Enter the divisor:");
result.setCaption("Result");
result.setReadOnly(true);
button.addClickListener(new Button.ClickListener(){
@Override
public void buttonClick(ClickEvent event) {
System.out.println("this is a test");
validateInputs();
}
});
resetButton.addClickListener(new Button.ClickListener(){
@Override
public void buttonClick(ClickEvent event) {
setDividend("");
setDivisor("");
setResult("");
}
});
vl.setMargin(true);
vl.setSpacing(true);
vl.addComponents(dividend, divisor, button, result);
}//end of constructor
public void validateInputs(){
System.out.println("theDivisor is " + getDivisor() + " theDividend " + getDividend());
try{
divisionResult = (Integer.parseInt(getDividend())/Integer.parseInt(getDivisor()));
}
catch(ArithmeticException arithmeticException){
System.err.println("Zero is an invalid denominator!");
createError("Divisor can't be 0!! Please enter a number > 0!");
}
catch(InputMismatchException inputMismatchException){
System.err.println("The dividend or divisor are not a number! Please enter a valid number!");
createError("The dividend or divisor are not a number! Please enter a valid number!");
}
}//end of validateInputs
public String getDivisor(){
return divisor.getValue();
}
public String getDividend(){
return dividend.getValue();
}
public void setDivisor(String newDivisor){
divisor.setValue(newDivisor);
}
public void setDividend(String newDividend){
dividend.setValue(newDividend);
}
public void setResult(String newResult){
result.setValue(newResult);
}
public void createError(String errorString){
String error = errorString;
Notification notif = new Notification(
error,
Notification.TYPE_ERROR_MESSAGE
);
notif.setDelayMsec(20000);
notif.show(Page.getCurrent());
}
}
ich den Versuch catch-Anweisung verwenden, wenn ich den Quotienten (aber ich haven‘berechnen (t das Ergebnis noch angezeigt)
Wenn ich 0 in den Divisor tippe, dann bekomme ich, was ich erwarte, eine ArithmeticException geworfen und behandelt wird. Allerdings, wenn ich eine Zeichenfolge in die Felder eingeben würde ich gedacht haben, dass die InputMismatchException kümmern würde, aber in der Tat ist dies die Nachricht, die ich in der Konsole Ich sah die NumberFormatException auf und ich bin mir nicht sicher, ob ich verstehe was zu tun ist und warum das passiert. Wie Sie aus dem Code entnehmen können, parse ich die Zeichenfolge in Ganzzahlen, aber es scheint, dass der Compiler es nicht mag. Muss ich eine catch-Anweisung hinzufügen und mich auch mit der NumberFormatException befassen? Sollte die InputMismatchException nicht ausreichen? Bitte lassen Sie mich wissen, was Sie denken
Unter welchen Umständen 'Integer.parseInt (String)' oder Integer-Division einen 'InputMismatchException' werfen? Das wird nur von 'Scanner', [laut Dokumentation] (https://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html) ausgelöst. –
'NumberFormatException: Für Eingabe-String:" iuy "' schlägt vor, die Eingabedaten, möglicherweise durch ein Eingabe/Textfeld gesammelt, Sie versuchen, in eine Zahl zu konvertieren ist eigentlich keine Zahl, genauer gesagt "iuy". Wenn ich mir Ihren Code anschaue, sehe ich nichts durch die 'InputMismatchException', während' Integer.parseInt' eine 'NumberFormatException' auslöst, wenn sie die Zeichenkette nicht in eine Zahl umwandeln kann, so dass Sie wahrscheinlich das falsche erwarten Ausnahme... – Morfic
Mögliches Duplikat von [Was ist eine NullPointerException und wie kann ich sie beheben?] (Http://StackOverflow.com/questions/39849984/what-is-a-nullpointerexception-and-how-can-i-fix-it) – xenteros