Exceptions mit try-catch-Surrounding - Probleme

Robotron

Mitglied
Hallo,

ich bin gerade dabei Reflections zu üben.

Dabei habe ich für einen reibungslosen Programmablauf Exceptions eingebaut mit "try-catch-surroundings".
Leider funktionieren diese Exceptions bei mir nicht.
Die Klasse java.util.InputMismatchException; habe ich importiert (import java.util.InputMismatchException;.
Somit würde ich gern wissen wollen, woran es liegt.

Hier ist der Programmcode (leider ließ er sich hier nicht im Orginalformat reinkopieren:

Java:
package Reflections;

//Import von Klassen
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Scanner;
import java.util.InputMismatchException;

//Import von Klassen aus anderen Paketen
import Unternehmen_A.Abteilung.*;
import Unternehmen_A.Mitarbeiter.*;
import Unternehmen_A.Praktikanten.*;

public class Haupt {

    public static void main(String[] args) {

            //Anzeige, ob Klasse im Program vorhanden ist

            //Eingabe der Klasse, die geprüft werden soll
            System.out.println("Gib die Klasse ein, die geprüft werden soll: ");
            String input1 = new Scanner(System.in).nextLine();
            //Objekt "Klasse" erstellen
            try {
                Class<?> classObject = Class.forName(input1);
                System.out.println(classObject);
            } catch (ClassNotFoundException exception1) {
                System.out.println("Diese Klasse gibt es in dem Programm nicht.");
            }

            //Klassen laden über Class-Loader

            //Eingabe der Klasse, die geladen werden soll
            System.out.println("Gib die Klasse ein, die geladen werden soll: ");
            String input2 = new Scanner(System.in).nextLine();
            //Objekt "Klasse" erstellen
            try {
                ClassLoader classObject = ClassLoader.getSystemClassLoader();
                classObject.loadClass(input2);
                System.out.println(classObject);
            } catch (ClassNotFoundException exception2) {
                System.out.println("Diese Klasse gibt es in dem Programm nicht.");
            }

            ///Class-Loader aus extern: Beispiel Klasse "Hunde" aus dem Programm Paw Petrols

            try {
                ClassLoader externClassObject = new URLClassLoader(new URL[] {
                    //Pfad zur externen Klasse
                    new URL("C:\\Users\\erikh\\OneDrive\\Dokumente\\Weiterbildung\\EDV-Weiterbildung\\Java-Grundkurs\\Paw_Petrols\\bin")
                });
                System.out.println(externClassObject);
            } catch (MalformedURLException exception3) {
                System.out.println("Sorry, den Pfad haben wir nicht gefunden.");
            }
    }
}


Für Hilfe danke ich.
 
Zuletzt bearbeitet von einem Moderator:

KonradN

Super-Moderator
Mitarbeiter
Code bitte in Code-Tags posten. Dazu am Einfachsten den Knopf </> links oberhalb des Eingabebereichs nutzen.

Und was ist bitte genau das Problem? Du hast einen import auf InputMismatchException, aber Du nutzt diese an keiner Stelle. Und ich sehe auch an keiner Stelle, wo diese Exception geworfen werden könnte. Scanner wirft diese beim Token basierten Lesen, wenn eine Eingabe den gewünschten Pattern nicht entspricht, aber Du hast von Scanner ja nur nextLine verwendet und nextLine wirft diese Exception auch nicht (wie ein Blick in die Dokumentation direkt aufzeigt).
 

Robotron

Mitglied
OK, dann scheine ich das mit dem Scanner noch nicht ausreichend verstanden zu haben.
Darf ich fragen, wie der Code aussehen müsste, damit der Scanner die Exception wirft?
Ich habe einiges ausprobiert, aber leider hat es nicht geklappt.
Für die Mühe danke ich im Voraus.
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal sollte man bei so Fragestellungen die Dokumentation der betroffenen Klassen lesen. Also z.B.:
um mehr über die Exception zu erfahren und da findet man dann den Hinweis, dass Scanner diese Exception nutzt:

Da kann man dann die Beschreibung der Methoden durchgehen, ob man eine Methode findet, die diese Exception wirft. Das ist z.B. bei nextInt der Fall:
was u.a. besagt:
InputMismatchException - if the next token does not match the Integer regular expression, or is out of range

Also wird diese Exception geworfen, wenn Scanner ein int Wert lesen soll aber kein int Wert gelesen wurde.

Also machen wir ein einfaches Beispiel, bei dem ich dann den Konstruktor Scanner(String) nutze:
Java:
        Scanner scanner = new Scanner("Hallo");
        try {
            int number = scanner.nextInt();
            System.out.println(number);
        } catch (InputMismatchException ex) {
            System.out.println("Not a number!");
            ex.printStackTrace();
        }

Aber so in Exceptions zu laufen wird in der Regel vermieden. Statt dessen prüft man Dinge vorab ab. Das wäre dann etwas in der Art:
Java:
        Scanner scanner = new Scanner("Hallo");
        if (scanner.hasNextInt()) {
            int number = scanner.nextInt();
            System.out.println(number);
        } else {
            System.out.println("Not a number: " + scanner.next());
        }

Und was man hier auch erkennen kann: man erstellt eine Instanz von Scanner uns nutzt diese dauerhaft. Ein ständiges new Scanner().nextLine() oder so ist etwas, das ich als sehr schlechtes Pattern ansehen würde. Eine Kontrolle wäre hier z.B. nicht möglich, da eine Scanner Instanz bei hasNextInt Dinge intern cached. Damit wäre bei einer neuen Scanner Instanz diese Information wieder weg.

Es hat lediglich den Vorteil, dass man sich deutlich weniger einen Kopf machen muss, wie Scanner funktioniert z.B. bei Wechsel zwischen Token basierter Eingabe zu Zeilen basierter Eingabe oder nach einem Check oder einer Exception das Auslesen des untauglichen Inhalts (Was ich z.B. mit dem next() Aufruf in der Ausgabe.)

Und auch noch der Hinweis: Scanner implementiert AutoClosable und das sollte man auch berücksichtigen und ggf. ein try-with-resources nutzen wo angebracht.
 

Robotron

Mitglied
Ich danke für die Tipps und Recherchemöglichkeiten.

Wenn ich das richtig verstehe, ist bei Scanner nextLine() das Werfen von Exceptions gar nicht möglich.
Wie könnte man dann in der Scanner Klasse Exceptions werfen lassen, wenn man String Werte eingeben muss?
Bei meinem o.g. Code sollen ja String Werte geprüft werden
 

KonradN

Super-Moderator
Mitarbeiter
nextLine kann auch Exceptions werfen:
  • nextLine Link icon

    public String nextLine()
    Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.
    Since this method continues to search through the input looking for a line separator, it may buffer all of the input searching for the line to skip if no line separators are present.
    Returns:the line that was skipped
    Throws:
    NoSuchElementException - if no line was found
    IllegalStateException - if this scanner is closed

Das kannst Du auch jeweils triggern:
Java:
        Scanner scanner = new Scanner("");
        scanner.nextLine();

Im Konstruktor wird ein Scanner erzeugt, ohne Inhalt. Da kein Inhalt vorliegt, kann keine Zeile gelesen werden.
Diese Exception wird also geworfen, wenn ein Stream o.ä. am Ende angekommen ist und Du versuchst, davon ein Element (Hier eine Zeile) zu lesen.

Das andere Beispiel wäre z.B. etwas wie hier:
Java:
        Scanner scanner = new Scanner("Hallo");
        scanner.close();
        scanner.nextLine();
Der Scanner ist geschlossen, wenn Du nextLine aufrufst. Hier ist dies durch scanner.close gemacht. Du nutzt es für Eingaben und da hat man dann so ein Problem z.B. wenn man einen Scanner auf System.in schliesst, was danna auch System.in schliesst so dass ein neuer Scanner auf System.in nichts lesen kann, da System.in ja geschlossen wurde.
 

KonradN

Super-Moderator
Mitarbeiter
Wie könnte man dann in der Scanner Klasse Exceptions werfen lassen, wenn man String Werte eingeben muss?
Bei meinem o.g. Code sollen ja String Werte geprüft werden
Eine Eingabe wird immer ein gültiger String sein aus Java Sicht (Das ist halt unter dem Strich einfach eine Menge von Codepoints was 16Bit Zahlen sind. Das mögen ggf. keine gültigen UTF Zeichen sein (z.B. ein einzelner Surrogate 0xD800-0xDFFF), technisch ist das erst einmal unproblematisch).

Wenn Du spezielle Anforderungen hast, dann kannst Du das entweder selbst prüfen (Also den String einfach einlesen um dann zu prüfen, ob der String den Anforderungen entspricht) oder falls Du z.B. einen Regulären Ausdruck angeben kannst, dann könntest Du auch Scanner.next(Pattern) nutzen. Das ist aber natürlich nicht immer möglich. Wenn Du auch eine Funktionalität sicher stellen willst, dann sind halt aktive Tests notwendig, die Scanner nicht kann (z.B. prüfen, ob eine Eingabe einem gültigen, existierendem File entspricht. Oder ob eine URL gültig ist und da ein Server wie gewünscht antwortet....)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
J Frage zum Thema Exceptions (Try/Catch) Java Basics - Anfänger-Themen 3
Z Catch & Exceptions Java Basics - Anfänger-Themen 4
R Exceptions (try/catch) Java Basics - Anfänger-Themen 63
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
C Exceptions, try, catch --> Frage Java Basics - Anfänger-Themen 7
Silver-Blue fragen zu Swing und catch Exceptions Java Basics - Anfänger-Themen 2
M Exception->mehrere Exceptions in einem Catch Block behand Java Basics - Anfänger-Themen 4
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
C Exceptions identifizieren Java Basics - Anfänger-Themen 5
A Exceptions mit objektreferenzen Java Basics - Anfänger-Themen 4
A Exceptions und methods Java Basics - Anfänger-Themen 2
A Cannot find symbol bei exceptions Java Basics - Anfänger-Themen 2
A Exceptions und Packages Java Basics - Anfänger-Themen 6
X Exceptions Benutzereingaben Java Basics - Anfänger-Themen 4
F Exceptions in Interfaces Java Basics - Anfänger-Themen 4
L Exceptions und Konten Java Basics - Anfänger-Themen 21
D Frage zu Exceptions Java Basics - Anfänger-Themen 8
G Wie programmiert man Exceptions? Java Basics - Anfänger-Themen 4
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
C Erste Schritte Exceptions nicht verstanden Java Basics - Anfänger-Themen 2
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
T Exceptions - ausgeführte Zeilen Java Basics - Anfänger-Themen 4
J Exceptions Java Basics - Anfänger-Themen 69
C Exceptions Java Basics - Anfänger-Themen 8
C Exceptions Java Basics - Anfänger-Themen 6
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
F Exceptions Java Basics - Anfänger-Themen 6
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
Farbenfroh Exceptions Anfänger - Finde Fehler nicht Java Basics - Anfänger-Themen 7
N Compiler-Fehler Drei Exceptions in GUIHack für Dreiecke auf MoveButtons Java Basics - Anfänger-Themen 36
V Welche Exceptions müssen importiert werden? Java Basics - Anfänger-Themen 3
S Exceptions Java Basics - Anfänger-Themen 7
M Vererbung Problem Vererbung/Exceptions Java Basics - Anfänger-Themen 9
S Verschachtelte Exceptions - Übersicht verbessern Java Basics - Anfänger-Themen 2
J Eclipse Exceptions Java Basics - Anfänger-Themen 2
K Schleifen und Exceptions Java Basics - Anfänger-Themen 8
K Exceptions auslagern Java Basics - Anfänger-Themen 15
R NullPointer Exceptions Java Basics - Anfänger-Themen 3
F Erste Schritte Übung zu Exceptions Java Basics - Anfänger-Themen 24
H Int Exceptions Java Basics - Anfänger-Themen 12
M Exceptions per throws oder try Java Basics - Anfänger-Themen 4
M Compiler-Fehler Queue als ArrayList mit Exceptions Java Basics - Anfänger-Themen 3
T Exceptions in einer Klasse Java Basics - Anfänger-Themen 3
B Eigene Exceptions entwerfen Java Basics - Anfänger-Themen 3
H Methoden Überflüssige Exceptions Java Basics - Anfänger-Themen 20
C Exceptions Java Basics - Anfänger-Themen 14
1 While Schleife Exceptions Java Basics - Anfänger-Themen 6
I Erste Schritte Eigene Fehlermeldungen bei Exceptions Java Basics - Anfänger-Themen 19
D Frage zu Exceptions Java Basics - Anfänger-Themen 12
M Compiler-Fehler Exceptions lieber throwen oder direkt catchen? Java Basics - Anfänger-Themen 8
T Exceptions Java Basics - Anfänger-Themen 19
B Wie finde ich Exceptions? Java Basics - Anfänger-Themen 19
Dit_ Input/Output Alle Exceptions protokollieren Java Basics - Anfänger-Themen 9
T Exceptions Java Basics - Anfänger-Themen 12
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
F Exceptions werfen oder catchen?? Java Basics - Anfänger-Themen 14
D Exceptions - Ausnahmebehandlung Java Basics - Anfänger-Themen 19
D Frage zu Exceptions und der import Anweisung Java Basics - Anfänger-Themen 12
J Paar Fragen zu Exceptions Java Basics - Anfänger-Themen 16
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
S Exceptions bei push/pop in Stack Java Basics - Anfänger-Themen 8
C Exceptions beim Beenden Java Basics - Anfänger-Themen 2
C TimerTask und Exceptions Java Basics - Anfänger-Themen 5
E Klasse öffnen, mehrere Exceptions Java Basics - Anfänger-Themen 9
C Exceptions Java Basics - Anfänger-Themen 7
G 2 Exceptions in einer Methode Java Basics - Anfänger-Themen 3
firefexx Exceptions werfen Java Basics - Anfänger-Themen 5
0 Exceptions mehrfach fangbar? Java Basics - Anfänger-Themen 4
O Exceptions Java Basics - Anfänger-Themen 3
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
H Diverse Exceptions - Troubleshooting Java Basics - Anfänger-Themen 3
J exceptions Java Basics - Anfänger-Themen 8
sc0p InterruptedExceptions und Exceptions - in Einem! Java Basics - Anfänger-Themen 5
M Frage zu Exceptions Java Basics - Anfänger-Themen 19
M Fragen zu Exceptions Java Basics - Anfänger-Themen 3
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
D Exceptions werfen + beenden Java Basics - Anfänger-Themen 12
M Exceptions aus interface-Methoden Java Basics - Anfänger-Themen 2
S File.renameTo und Exceptions / Fehlermeldung Java Basics - Anfänger-Themen 2
B Exceptions in Liste sammeln? Java Basics - Anfänger-Themen 5
O Eigene Exceptions Java Basics - Anfänger-Themen 11
O "restliche" Exceptions fangen Java Basics - Anfänger-Themen 8
H [Stil] Exceptions in der Klasse behandeln oder throwen? Java Basics - Anfänger-Themen 62
T Problem beim Werfen und Fangen von Exceptions Java Basics - Anfänger-Themen 2
V Aktivitätsdiagramm / Exceptions Java Basics - Anfänger-Themen 5
V Exceptions Java Basics - Anfänger-Themen 6
K Frage zu Exceptions -> Logging Java Basics - Anfänger-Themen 6
M Eigene Fehlermeldung bei Exceptions? Java Basics - Anfänger-Themen 12
R JDom Exceptions Java Basics - Anfänger-Themen 4
R Datei einlesen mit Exceptions Java Basics - Anfänger-Themen 2
C Reflection Exceptions behandeln Java Basics - Anfänger-Themen 6
G Exceptions - spiegeln wir da nicht einen Spiegel im Spiegel? Java Basics - Anfänger-Themen 10
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
U Frage zu Exceptions Java Basics - Anfänger-Themen 5
mwildam Philosophiefrage zu Exceptions und Rückgabewerten Java Basics - Anfänger-Themen 6
D Static, final Objekte mit Exceptions im Konstruktor Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben