Stringvergleich funktioniert nicht mehr

  • Stringvergleich funktioniert nicht mehr

    Hallo Leutz

    Also, wir haben in der Schule ein Javaprojekt, bei dem auch ein UDP Server dabei ist. Bei dem wird für jede Message, die ankommt ein Thread gestartet, der die Message verarbeitet.
    Nun habe ich das Problem, das eine Irgendeinstring.equals(Einandererstring) false ist, obwohl es (zur Laufzeit) eindeutig der gleiche String ist! Und in einem Anderen Thread funktionierts genau so!

    Ich print mal noch den code:

    Quellcode

    1. if(getMessage.msgParameter[0].equals(Message.NXT_PAR)){
    2. ...
    3. }
    4. else if(getMessage.msgParameter[0].equals(Message.PRV_PAR)){
    5. ...
    6. }
    7. else{
    8. ...
    9. }


    Kann mir da jemand n tip, woran das liegt geben?

    GruZZ Diskordia
    Ialea iacta est
  • RE: Stringvergleich funktioniert nicht mehr

    Aus deinem Code kann man keinen Fehler herleiten. Aber bei Threads musst man immer aufpassen, das gibt die wildesten Fehler. Könnte es sein, dass ein anderer Thread den Wert von getMessage.msgParamater[0] zwischenzeitlich verändert hat?
  • So kann das ja nicht stimmen. Wenn alle nur auslesen, dann stünde nichts drin. ;)

    Du meinst sicher, dass die gestarteten Threads nur auslesen und der Hauptthread schreibt? Auch der kann das natürlich zu einem ungünstigen Zeitpunkt machen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Also es ist so:
    Wir haben erstmal n Thread der von dem DatagramSocket die DatagramPacket empfängt und ein Messageobjekt erstellt. Diese Message wird in eine Queue gespeichert.

    Dann haben wir einen Thread der diese Message aus der Queue liest und an die verarbeitende Threads verteilt.

    Die equals Abfrage, die Probleme macht ist in einem der Verarbeitenden Threads. Im Verteiler Thread funktioniert aber die gleiche Abfrage!

    Ich lass zur Laufzeit die beiden Strings vor der Abfrage ausgeben und sie sind identisch!

    Sogar unser Dozent ist ratlos :(

    @snoman
    Alle gemeinsamen Daten sind mit synchronized gekapselt!
    Ialea iacta est
  • Die equals Abfrage, die Probleme macht ist in einem der Verarbeitenden Threads. Im Verteiler Thread funktioniert aber die gleiche Abfrage!

    Ich lass zur Laufzeit die beiden Strings vor der Abfrage ausgeben und sie sind identisch!

    Hmmm, dann kann es darn nicht liegen. Schade. Was ergibt denn die Ausgabe unmittelbar nach dem Vergleich?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Ah ich habs endlich rausgefunden :D

    Durch das übertragen übers Netzt wurden nichtdarstellbare Zeichen mitangehängt. Ich hab jetzt n trim() gemacht und so läufts jetzt. Wiso dass das im anderen Thread trotzdem geht weiss ich nicht.

    @snowman
    Der Debugger hat genau das gleiche wie die Ausgaben angezeigt

    Danke für eure Bemühungen!

    GruZZ Diskordia
    Ialea iacta est