while-schleifen prob

Status
Nicht offen für weitere Antworten.
S

stiewen

Gast
leute, ich flippe aus, seit 3 Tagen sitze ich an dieser Schleife:

Code:
  Shessi2_1 jFrParent;
  Database database;
  byte[] buf = new byte[100];
  DatagramPacket dpRec;
  public MultiSocketServer ( Shessi2_1 jFrPar ) {
    jFrParent = jFrPar;
    database = jFrParent.database;
  }
  public void run (  ) {
    try {
      String strTemp;
      String[] strTempList;
      while ( true ) {
        dpRec = new DatagramPacket(buf, buf.length);
        database.msSocket.receive(dpRec);
        System.out.println("da" );
        strTemp = new String(dpRec.getData());
        if ( strTemp.startsWith("SignedOn|") && !strTemp.substring(9).startsWith(database.strUserName) && !jFrParent.jdlmList.contains(strTemp.substring(9)) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(9), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
          String msg = "AddGroupMember|" + "Dieter" + "|" + database.strUserIP;
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup, database.intPort3);
          database.msSocket.send(dpSignUser);
        } else if ( strTemp.startsWith("AddGroupMember|") && !strTemp.startsWith("AddGroupMember|" + database.strUserName) && !jFrParent.jdlmList.contains(strTemp.substring(9)) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(15), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
        }
        buf = new byte[100];
        dpRec.setData(buf);
        strTemp = "";
        Thread.sleep(500);
      }
    } catch ( Exception e ) {
      new ExceptionHandler("MultiSocketServer Exception" + e.toString());
    }
  }

das prob: jFrParent.jdlmList.addElement(strTemp); legt mir unmengen an daten in meine JList!
habs schon mit synchronized versucht... geht auch net
 

André Uhres

Top Contributor
stiewen hat gesagt.:
Code:
...
      while ( true ) {
...
          jFrParent.jdlmList.addElement(strTemp);
...
      }
...
das prob: jFrParent.jdlmList.addElement(strTemp); legt mir unmengen an daten in meine JList! ...
Wenn die Schleife schon 3 Tage läuft ist das ja auch kein Wunder.
 
S

stiewen

Gast
sry, hätte vll sagen müssen, dass Zeile 15
Code:
database.msSocket.receive(dpRec);
blockiert bis was ankommt... :meld:
 

Stiewen

Aktives Mitglied
im gegenteil!
In der Konsole kommt noch viel mehr an! normalerweise soll bloß 3 mal durchgelaufen werden und dann hälts an ...
aber er printet irgendwie 13 mal "da" und gibt mir 6 Elemente inne jlist
 

André Uhres

Top Contributor
Das soll ne Unmenge sein?
Aber egal, vor der Konsolenausgabe steht ja auch keine Bedingung. Somit ist es vollkommen normal, daß da mehr rauskommt.
 

Stiewen

Aktives Mitglied
Also, ich habs hinbekommen, wie ich wollte...
Code:
  Shessi2_1 jFrParent;
  Database database;
  byte[] buf = new byte[100];
  DatagramPacket dpRec = new DatagramPacket(buf, buf.length);
  public MultiSocketServer ( Shessi2_1 jFrPar ) {
    jFrParent = jFrPar;
    database = jFrParent.database;
  }
  public void run (  ) {
    try {
      String strTemp;
      String[] strTempList;
      while ( true ) {
        database.msSocket.receive(dpRec);
        strTemp = new String(dpRec.getData());
        System.out.println("über: " + strTemp );
        if ( strTemp.startsWith("SignedOn|") && !strTemp.substring(9).startsWith(database.strUserName) ) {
          System.out.println("empfangen: " + strTemp );
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(9), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.removeElement(strTemp);
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
          String msg = "AddGroupMember|" + database.strUserName + "|" + database.strUserIP;
          System.out.println("gesendet: " + msg );
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup, database.intPort3);
          database.msSocket.send(dpSignUser);
        } else if ( strTemp.startsWith("AddGroupMember|") && !strTemp.substring(15).startsWith(database.strUserName) ) {
          StringTokenizer stTemp = new StringTokenizer(strTemp.substring(15), "|");
          strTemp = stTemp.nextToken();
          jFrParent.jdlmList.removeElement(strTemp);
          jFrParent.jdlmList.addElement(strTemp);
          database.hmContacts.put(strTemp, stTemp.nextToken());
        }
      }
    } catch ( Exception e ) {
      new ExceptionHandler("MultiSocketServer Exception" + e.toString());
    }
  }
Prob ist aber jetzt: wenn ich das Programm auf dem Rechner meines Dads laufen lasse und es bei mir starte, gibt er das bei meinem Dad aus... anders herum aber nicht... zudem:
Code:
          String msg = "AddGroupMember|" + database.strUserName + "|" + database.strUserIP;
          System.out.println("gesendet: " + msg );
          DatagramPacket dpSignUser = new DatagramPacket(msg.getBytes(), msg.length(), database.iaGroup,
das soll ja nochmal zurückgeschickt werden, dass der NewAngemeldete nachrichten von all denen bekommt, die schon on sind ... das kommt aber auf keiner seite an ...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben