Timer + Modulo

tameck

Erfahrenes Mitglied
Hallo Zusammen,

ich habe eine Timer Methode geschrieben und eine Abfrage mit einem Modulo. Wenn die Abfrage zutrifft werden in einer ComboBox alle eingetragene Werte gelöscht und neu reingeschrieben. Beim ersten durchlauf funktioniert das einwandfrei aber beim zweiten Durchlauf trägt er jeden Wert doppelt ein und so macht er das dann bei jedem Durchlauf.

Hier ist der Code

Code:
 timer = new Timer(1000, this);
	sec = 1;
	System.out.println(sec);
	timer.setInitialDelay(0);
	timer.start();

Code:
if((sec % 10)==0){
				out.println("Q_USR_STATUS:"+localDomainName+"_"+localHostName);
				System.out.println("Überprüfe deinen Status...");
	
				try {
					ausgabe = in.readLine();
					
				}catch (IOException e1){
					e1.printStackTrace();
				}
					
				array = ausgabe.split(":");
				System.out.println(array[0]+" ZZZ "+array[1]);
				
				if(array[0].equals("R_USR_STATUS")){
					ausgabe=array[1];
					array=ausgabe.split(";");
					System.out.println(array[0]+" YYY ");
					label9.setText("Status: "+array[0]);
					if(array[0].equals("USR_LOGGED_IN")){
						ipadresse.removeAllItems();
						for(int i=0;;i++){
							try{
								ipadresse.addItem(array[i+1]);
//								System.out.println(i+" Try "+ipadresse.getItemAt(i));
								
							}catch(Exception e2){
//								System.out.println(i+" Catch ");
								break;
						}
					}
				}
			}
		}
		
	sec++;

Hoffe der Code reicht euch so um mir bei meinem Problem zu helfen.

MfG Tameck
 
Zuletzt bearbeitet:
Moin!
Es gibt mehrere Möglichkeiten. Entweder beinhaltet dein Array alle Einträge doppelt oder du leerst die ComboBox nicht (richtig).
Ich würde dir empfehlen, einfach mal ein paar Debug Ausgaben zu setzen. Also jedesmal anzeigen zu lassen, wieviele Items werden eingefügt, welches wird eingefügt, wieiviele sind schon drin, etc ,etc..

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Zuerst einmal muss ich hier den Stil anmahnen.
Mag ja sein, dass das funktioniert, aber mir rollt es gerade die Zehennägel auf.
Du kannst die Schleife wunderbar über die Länge des Arrays begrenzen, try-catch und break kannst du dir sparen (macht das ganze auch wesentlich schneller - was bei deiner Anforderung wahrscheinlich nicht ins Gewicht fallen dürfte)

Code:
for(int i=0;;i++){
							try{
								ipadresse.addItem(array[i+1]);
//								System.out.println(i+" Try "+ipadresse.getItemAt(i));
								
							}catch(Exception e2){
//								System.out.println(i+" Catch ");
								break;
						}


Ansonsten kann ich jetzt erstmal direkt keinen Fehler erkennen. Allerdings mutet mir deine Verwendung der Timer-Funktionalität als etwas seltsam an. So wie ich das sehe, machst du die eigene Klasse zum Timer. Evtl. ergibt sich dadurch eine endlose Timer-Erzeugung, weil jeder Timer wieder einen neuen Timer enthält und dadurch alles mehrfach ausgeführt wird.

Um das feststellen zu können, müsstest du aber mal mehr Code posten.

Davon abgesehen, scheint die Kommunikation deines Programms über die Konsole zu laufen. Da ich mir nicht vorstellen kannst, dass du die Konsoleneingabe händisch machst, überprüfe mal, ob das Programm, dass mit diesem kommunizieren soll, auch die Daten richtig liefert.

Leider ist nicht so wirklich zu erkennen, was du eigentlich machen willst (ich tippe jetzt mal auf eine Chat-Funktionalität, wobei sich mir da die Frage stellt, was da die Konsole soll)
 
Wenn ich den Timer ohne Modulo laufen lasse funktioniert es einwandfrei.

Hier der geänderte Code:

Code:
sec++;
		if(sec == 10){
			
			timer.stop();
			out.println("Q_USR_STATUS:"+localDomainName+"_"+localHostName);
			System.out.println("Überprüfe deinen Status...");

			try {
				ausgabe = in.readLine();
				
			}catch (IOException e1){
				e1.printStackTrace();
			}
				
			array = ausgabe.split(":");
			System.out.println(array[0]+" ZZZ "+array[1]);
			
			if(array[0].equals("R_USR_STATUS")){
				ausgabe=array[1];
				array=ausgabe.split(";");
				System.out.println(array[0]+" YYY ");
				label9.setText("Status: "+array[0]);
				if(array[0].equals("USR_LOGGED_IN")){
					ipadresse.removeAllItems();
					for(int i=0;;i++){
						try{
							ipadresse.addItem(array[i+1]);
//							System.out.println(i+" Try "+ipadresse.getItemAt(i));
							
						}catch(Exception e2){
//							System.out.println(i+" Catch ");
							break;
					}
				}
			}
		}
			sec = 1;
			timer.start();	
	}

Da es so läuft frag ich mich warum die Methode mit nem Modulo mir die ComboBox zweimal füllt.

Noch ein Zusatz bei dem Timer mit dem Modulo lass ich gleichzeitig eine weitere abfrage mit nem Modulo laufen kann es sein das die sich ins gehege kommen

Code:
	if((sec % 5)==0){
			out.println("Q_MOTD:");
			try{
				ausgabe = in.readLine();
				array = ausgabe.split(":");
				}catch (IOException e1) {
					e1.printStackTrace();
				}
				if(ausgabe.length()>=8){	
					if(arraykopie.equals(array[1])){
					}
					else{
						JOptionPane.showMessageDialog(null,array[1],"BDAAD MESSAGE",JOptionPane.INFORMATION_MESSAGE);
						durch=true;
					}
					if(!durch){
						JOptionPane.showMessageDialog(null,array[1],"BDAAD MESSAGE",JOptionPane.INFORMATION_MESSAGE);	
						durch=true;
					}
					arraykopie=array[1];		
			    }
				else{
					System.out.println("today no message of the day");
				}
		}
		
		if((sec % 10)==0){
				out.println("Q_USR_STATUS:"+localDomainName+"_"+localHostName);
				System.out.println("Überprüfe deinen Status...");
	
				try {
					ausgabe = in.readLine();
					
				}catch (IOException e1){
					e1.printStackTrace();
				}
					
				array = ausgabe.split(":");
				System.out.println(array[0]+" ZZZ "+array[1]);
				
				if(array[0].equals("R_USR_STATUS")){
					ausgabe=array[1];
					array=ausgabe.split(";");
					System.out.println(array[0]+" YYY ");
					if(array[0].equals("USR_NOT_LOGGED_IN")){
						label9.setText("Status: "+offline);
					}
					else{
						label9.setText("Status: "+online);
					}
					if(array[0].equals("USR_LOGGED_IN")){
						ipadresse.removeAllItems();
						for(int i=0;;i++){
							try{
								ipadresse.addItem(array[i+1]);
//								System.out.println(i+" Try "+ipadresse.getItemAt(i));
								
							}catch(Exception e2){
//								System.out.println(i+" Catch ");
								break;
						}
					}
				}
			}
		}
		
	sec++;

Das Programm ist ein Client der User an einem Server anmelden soll, also ein einfaches Login fenster.

Danke für eure Antworten und dür eure Hilfe.
 
Zurück