Forum: PC-Programmierung vbnet Exception wird abgefangen und bringt trotzdem UnhandeledException


von benk (Gast)


Lesenswert?

Moin,

ich hab hier ein kleines Problem:

Ich erstelle einen Substring (von einem String). In diesen String (den 
originalen) kommen Daten von einer SPS (RS-232 Port) an.

Wenn jetzt aber die SPS neugestartet wird oder kurz die Kommunikation 
unterbricht, kommt eine Nullreferenceexception "Der Objektverweis wurde 
nicht auf eine Objektinstanz festgelegt"
1
 If str1.Length > 6 Then substr1 = str1.Substring(str1.Length - 6) else
2
If str1.length < 2 then msgbox ("Str1 leer")

Müsste das nicht schon ausreichen das keine Exception kommt, sondern 
stattdessen die  msgbox "Str1 leer"?

Klappt nicht, er markiert die erste Zeile des hier genannten Codes und 
bringt eine Nullreferenceexception.

Außerdem klappt Try-Catch nicht:
1
 Try
2
            If str1.Length > 6 Then substr1 = str1.Substring(str1.Length - 6) else
3
If str1.length < 2 then msgbox ("Str1 leer")
4
        Catch Nullreferenceexception As Exception
5
            Errorform.show
6
Errorform.TextBox1.Text = Nullreferenceexception.ToString
7
        End Try

Hier kommt zeitgleich mit öffnen der Error-Form ein "Unbehandelte 
Ausnahme in der Anwendung".

Da die Anwendung auch ohne die Daten im String / Substring erstmal 
weiterarbeiten kann, soll lediglich eine Info für den Nutzer erscheinen 
dass die Daten der SPS im String nicht zu Verfügung stehen, die 
Exception soll vermieden werden.

Was mache ich falsch?

von Schlaumaier (Gast)


Lesenswert?

benk schrieb:
> Was mache ich falsch?

If str1.length < 2 then msgbox ("Str1 leer")

Das KANN muss aber nicht auslösen.

Bedingung 1 :  String = "" <- DAS ist leer
Bedingung 1 :  String = " " <- DAS ist fast leer weil 1 (hier 
Leer)Zeichen.

If str1.length = 0 then msgbox ("Str1 leer")

Und kannst um sicher zu sein auch
If trim(str1.length) 0 then msgbox ("Str1 leer")

DAS ist dann sicher richtig leer. !!!

Grund : Man übersieht bei String-Operationen gerne mal Leerzeichen.

von Schlaumaier (Gast)


Lesenswert?

Nachtrag:

Habs übersehen im Code

Und benutzt den Falschen Fehlerabfang-Code.

Hier die Erklärung.

https://docs.microsoft.com/de-de/dotnet/api/system.nullreferenceexception?view=net-6.0

Zitat der Quelle : "Eine NullReferenceException Ausnahme wird ausgelöst, 
wenn Sie versuchen, auf ein Element auf einen Typ zuzugreifen, dessen 
Wert lautet null."

Dein String ist NIEMALS NULL. Der er ist ja etwas.

Eine NULL hat meist (nicht immer) den Inhalt eines nur angelegten 
Datenbankfeld.  BEVOR da was rein geschrieben wurde.

von Schlaumaier (Gast)


Lesenswert?

Hier dir richtige Antwort.

https://www.tutorialspoint.com/vb.net/vb.net_exception_handling.htm

Mach bei dein String ne Anständige Prüfung dann brauchst du das nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.