Problem mit streamwriter

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    Problem mit streamwriter

    Ich habe folgendes Problem. Mein Button löst eine Nullverweis Ausnahme aus.

    Hier der Code des Buttons:

    VB.NET-Quellcode

    1. Protected Sub button_login_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button_login.Click
    2. Try
    3. streamw.WriteLine("Login:" & txt_benutzer.Text & ":" & MD5StringHash(txt_passwort.Text))
    4. streamw.Flush()
    5. Catch ex As Exception
    6. MsgBox(ex.Message.ToString)
    7. End Try
    8. End Sub


    Der Fehler kommt bei streamw.writeline(...)
    Der Streamwriter wurde bereits deklariert... also mit "new" und so.
    Nullverweiß-Ausnahme (aka NullPointerException): Verwenden eines Objektes, welches zwar einen Daten-/Objekttyp aber noch keinen Wert zugewiesen bekommen hat.
    Also: Dein Programm spricht auf jeden Fall dein Objekt (StreamWriter) an, bevor dieser einen Wert (durch z.B. erstem/erneutem aufrufen des Konstruktors) besitzt. Banane und sinnlos -> Sorge dafür, dass vorher ein Wert zugewiesen wird!

    MfG,
    X-Zat / Momo
    Den Streamwriter haben wir allerdings zusammen mit der Connection in der Sub Page_Load zugewiesen. Dort ist auch die Connection gestartet worden. Muss nun in jedem Sub, in dem der Streamwriter auftaucht der Stream neu gestartet werden?

    VB.NET-Quellcode

    1. Private client As New TcpClient
    2. Private stream As NetworkStream
    3. Private streamw As StreamWriter
    4. Private streamr As StreamReader
    5. Private client As New TcpClient
    6. Private t As New Threading.Thread(AddressOf Listen)
    7. Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    8. Try
    9. client.Connect("IP", PORT)
    10. If client.Connected Then
    11. stream = client.GetStream
    12. streamw = New StreamWriter(stream)
    13. streamr = New StreamReader(stream)
    14. t.Start()
    15. Else
    16. 'Exceptionausgabe
    17. End If
    18. Catch ex As Exception
    19. ' Exceptionausgabe
    20. End Try
    21. End Sub


    Also prinzipiell der Code von Kevin89's Multiserver.

    Mit freundl. Grüßen
    Padarom

    VB.NET-Quellcode

    1. streamw.WriteLine("Login:" & txt_benutzer.Text & ":" & MD5StringHash(txt_passwort.Text))

    streamw scheint es nicht zu sein, es sei denn, es wird in der Zwischenzeit disposed.
    Wie ist MD5StringHash deklariert?
    Setze auf die Zeile

    VB.NET-Quellcode

    1. streamw.WriteLine("Login:" & txt_benutzer.Text & ":" & MD5StringHash(txt_passwort.Text))
    einen Haltepunkt und sieh Dir alle Komponenten der Zeile an, dann siehst Du sofort, wo es klemmt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Toll, trotzdem:

    Es kann bei diesem Fehler logischerweise nur eines dieser Elemente "wertlos" sein:

    streamw
    txt_benutzer
    MD5StringHash
    txt_passwort

    Geht nicht anders. Kannst ja vllt ma den ganzen Source-Code zur Verfügung stellen - Wer weiß, wie du die Komponenten deklarierst/initialisierst?

    MfG,
    X-Zat / Momo
    Natürlich hab ich den ganzen Thread nicht gelesen, weil ich ignorant genug bin, obiges zu ignorieren, nicht?
    Nein, jetzt mal ohne Witz...

    Ihr schließt alle Objekte systematisch aus, die in dieser Zeile auch nur im entferntesten angesprochen werden.
    Nur wird da der Fehler produziert und es sind nunmal sonst keine Objekte da, oder?

    Wenn das so sein sollte, dann muss ja wohl oder übel irgendwo ein kleiner Zwerg im VS sitzen, sich denken "Neee, die lass ich doch nicht weitermachen!", sich den Arsch kratzen und euch sabotieren...

    Geht doch nochmal alle Objekte durch, wie und wo sie deklariert werden, so sie wie angesprochen werden. Vielleicht hat ja ein Objekt eine leere Property oder was weiß ich. Was bleibt euch sonst übrig? -> Neu schreiben. Möglichst nicht auf exakt gleiche Art und Weise.

    MfG,
    X-Zat