warten in einer while-schleife

Status
Nicht offen für weitere Antworten.
M

mote14

Gast
da in dem forum hauptsächlich von applets geschrieben wird, weiß ich nicht ob der eintrag hier reinpasst, sonst habe ich aber leider nichts anderes gefunden. (es handelt um eine application)
mein problem ist folgendes:
ich habe eine while schleife, die jedes mal nach den andern anweisungen eine halbe sekunde warten soll.
ich habe es probiert mit
Code:
 try 
        {
        Thread.sleep(500);
        }
        catch(InterruptedException e){
        }
am ende, aber leider zählt er dann die gesamte zeit (also bei 4 durchläufen 2 sekunden) zusammen und führt die anderen anwisungen erst danach auf einmal aus.
es sollte aber wie gesagt so sein, dass nach einigen anweisungen gewartet wird, dann anweisungen, dann warten usw. bis die while bedingung nicht mehr stimmt.

mein gesamter code schaut übrigens so aus:
Code:
while(s1>s2){
s2=s2+1;
s3=s1-s2;
jTextAreaAusgabe.append("Jetzt sind es schon "+s2+" Es fehlen nur noch "+s3+" bis " + s1);
try 
        {
        Thread.sleep(500);
        }
        catch(InterruptedException e){
        }

}
wüsste vielleicht jemand eine lösung für das problem?
 

diggaa1984

Top Contributor
gehts um das aktualisieren von nem textfeld? damit du das siehst müsstest du das auch in der schleife vornehmen, sonst siehst du erst was wenn die schleife komplett durch is, aber da brauchma mehr code um das genauer zu sagen
 

SegFault

Bekanntes Mitglied
ich tippe auch darauf das wie diggaa1984 es sagt, das feld in dem der String reingeschrieben werden soll nicht aktualisiert wird. dort gehört ggf sowas wie ein validate oder ähnliches rein damit der inhalt des Textfeldes (o.ä) auch upgedated wird.
 
M

mote14

Gast
das wichtigste ist ja das warten, das funktioniert nicht richtig. wenn das was ihr sagt hilft hätte ich das bitte gerne näher erklärt
 

hdi

Top Contributor
Änder deinen Code mal so:

Code:
while(s1>s2){
System.out.println("Doing stuf...");
s2=s2+1;
s3=s1-s2;
jTextAreaAusgabe.append("Jetzt sind es schon "+s2+" Es fehlen nur noch "+s3+" bis " + s1);
try
        {
        Thread.sleep(500);
        }
        catch(InterruptedException e){
           System.out.println("ERROR ON TRY BLOCk!");
        }

}
das ändert zwar nichts an der funktionalität, aber so sieht man zumindest was passiert. D.h. ob
ein Fehler beim sleep kommt. Vllt bringst du nur was durcheinander, weil eig. muss das so funktionieren.
 
M

mote14

Gast
das bringt auch nichts, er zählt die gesamte wartezeit zusammen und macht erst danach die aufgaben, die er eigentlich zwischen den pausen machen sollte...
danke im vorraus für konstruktive lösungsvorschläge!
 
J

java2000

Gast
Ist es möglich, dass deine Schleife im Event-dispatching-thread (=EDT) abläuft? Das ist z.B. der Fall, wenn du einen Button klickst, an den ein ActionListener angehängt wurde, der dann diesen Code im actionPerformed() durchläuft. In dem Fall müsstest du diesen Code-Block in einem separaten Thread laufen lassen, nicht im EDT. Das könnte etwa so aussehen:

Code:
Thread thread = new Thread(new Runnable() {
	public void run() {
		// dein Code
	}
} );
thread.start();

Sofern dein Object jTextAreaAusgabe nämlich von der Klasse JTextArea ist, wird sie vom EDT neu gezeichnet, das heisst, wenn sich der Text ändert, muss der EDT kommen und den neuen Text in deinem GUI zeichnen. Wenn der EDT aber mitten in deinem Block steckt und gerade sleep(500) durchläuft, kann er ja nichts neu zeichnen.
 

Empire Phoenix

Top Contributor
Der compiler optimiert evtl deinen code, da er das warten als sinnlos erkennt

am rande kleine andere sachen:

s2++;

Und versuch mal System.out.println("Dein text");

weil wie schon gesagt das textfeld evtl nicht geupdated wird, die Console aber garatiert das anzeigt.
 
M

mote14

Gast
und wie kann ich machen dass nach einer halben sekunde die anweisungen kommen, dann wieder warten und so weiter bis die schleifenbedingungen nicht mehr erfüllt sind, so dass die anweisungen noch ausgeführt werden BEVOR die gesamte zeit abgelaufen ist, sondern eben nach 0,5 - 1- 1,5 usw sekunden?
danke
 
M

mote14

Gast
das "ERROR ON TRY BLOCk!" erscheint nicht, das ist also auch eine sackgasse

@java2000: sorry ich hab deine antwort zuerst gar nicht gesehen. das ganze läuft wirklich mit einem button ab(actionPerformed)
wie kann ich das in einen eigenen Thread(und was ist das überhaupt?!) tun?

bin ziemlicher anfänger, sorry wenn ich euch mit meinen oft relativ doofen fragen auf die nerven gehe

danke
 
G

Guest

Gast
Du hast vielleicht schon eine Ahnung von Threads, wenn du mehrere Threads hast, dann laufen die parallel und arbeiten ihren Code ab. Wenn du mit Swing arbeitest, hast du immer einen Event-Dispatching-Thread (genannt EDT), der für die Swing Komponenten verantwortlich ist. Wie der Name sagt, arbeitet dieser Tread einen Event nach dem anderen ab, das Zeichnen der Swing Komponenten ist z.B. ein solcher Event.
Wenn du einem JButton einen ActionListener anhängst, und dann diesen Button klickst, dann ist es auch der EDT, der den Code ausführt, den du in die actionPerformed geschrieben hast (ist ja ein ActionEVENT). Solange er mit dieser ActionPerformed beschäftigt ist, kann er nichts neu zeichnen, wenn sich also der Text deiner JTextArea ändert, zeichnet er das nicht sofort neu. Deswegen musst du einen neuen Thread starten, der solche lang andauernden Berechnungen durchführt, det EDT ist dann frei und hat "Zeit" Komponenten neu zu zeichnen, falls nötig (wenn sich eben der Text ändert).

Einen neuen Thread zu starten ist in Java denkbar einfach, siehe meinen letzten Post. Komplett könnte dein Code dann so aussehen:
Code:
JButton myButton = new JButton("Klick mich");
myButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent event) {
		
		// Instanziere einen neuen Thread
		Thread thread = new Thread(new Runnable() {
			public void run() {
				
				// dein Code
				while(s1>s2){
					System.out.println("Doing stuf...");
					s2=s2+1;
					s3=s1-s2;
					jTextAreaAusgabe.append("Jetzt sind es schon "+s2+" Es fehlen nur noch "+s3+" bis " + s1);
					try
						{
						Thread.sleep(500);
						}
						catch(InterruptedException e){
						   System.out.println("ERROR ON TRY BLOCk!");
						}

				}
			}
		} );
		thread.start(); // thread starten
		
	}
}

naja, sieht nicht super übersichtlich aus, aber
 
M

mote14

Gast
funktioniert prächtig!!! und kapiert hab ich das auch noch... hoffentlich verlangst du jetzt von mir kein lehrgeld^^

danke, ich sitz jetzt echt schon wochenlang auf dem problem und jetzt hab ich den durchbruch...

vielen vielen dank! :toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
E Richtiges Warten Java Basics - Anfänger-Themen 8
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
G Wie kann ich 1s lang warten? Java Basics - Anfänger-Themen 1
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
A Thread auf anderen warten Java Basics - Anfänger-Themen 2
C Warten auf Antwort Java Basics - Anfänger-Themen 22
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
E ExecutorService warten bis alles fertig? Java Basics - Anfänger-Themen 5
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
D Input/Output Auf Tasteneingabe warten Java Basics - Anfänger-Themen 4
A Activity1 soll auf Activity2 warten (Camera-Intent) Java Basics - Anfänger-Themen 5
D Threads Kartenspiel - auf legen warten Java Basics - Anfänger-Themen 15
B Methode warten lassen bis Button gedrückt wird Java Basics - Anfänger-Themen 16
JAVAnnik auf Threadende warten Java Basics - Anfänger-Themen 6
H Auf Threads warten Java Basics - Anfänger-Themen 3
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
I Auf DB-Operation warten Java Basics - Anfänger-Themen 2
R Thread soll auf andere Threads warten Java Basics - Anfänger-Themen 3
T Warteschlange warten lassen bis Ereignis Java Basics - Anfänger-Themen 27
A Main warten lassen bis Variable durch Button übergeben wird Java Basics - Anfänger-Themen 2
V Warten bis die Länge eines Strings nicht mehr 0 ist Java Basics - Anfänger-Themen 13
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
D Auf Event warten Java Basics - Anfänger-Themen 4
F Logikproblem: Auf Mouselistener warten Java Basics - Anfänger-Themen 6
E Auf Mouselistener warten?! Java Basics - Anfänger-Themen 20
M Warten bis Thread an einem Semaphore angekommen ist Java Basics - Anfänger-Themen 4
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Auf andere Methode warten Java Basics - Anfänger-Themen 7
B Während Schleife nicht auf Eingabe warten Java Basics - Anfänger-Themen 2
T auf vbscript warten Java Basics - Anfänger-Themen 3
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
C auf beendigung eines threads warten Java Basics - Anfänger-Themen 6
P Warten auf KeyTyped Java Basics - Anfänger-Themen 7
L programm zum warten zwingen Java Basics - Anfänger-Themen 4
B Auf Programm warten Java Basics - Anfänger-Themen 2
S Auf Object warten Java Basics - Anfänger-Themen 2
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T eine Sekunde warten Java Basics - Anfänger-Themen 11
C Konsolenanwendung auf belibige Taste warten Java Basics - Anfänger-Themen 2
D Auf anderes Fenster Warten Java Basics - Anfänger-Themen 6
A Warten auf Userinput Java Basics - Anfänger-Themen 2
G Bei JDialog warten Java Basics - Anfänger-Themen 5
T Auf Selection warten Java Basics - Anfänger-Themen 7
N Java Insel 6 lesen oder auf 7 warten ? Java Basics - Anfänger-Themen 11
S Programmablauf pausieren, bzw. auf Eingabe warten Java Basics - Anfänger-Themen 4
G Warten auf Eingabe Java Basics - Anfänger-Themen 12
G Thread soll warten Java Basics - Anfänger-Themen 5
F 1 Minute warten Java Basics - Anfänger-Themen 18
S Thread auf Thread warten lassen. Java Basics - Anfänger-Themen 2
G auf ende mehrerer threads warten Java Basics - Anfänger-Themen 2
B Timer / Thread warten Java Basics - Anfänger-Themen 3
G warten Java Basics - Anfänger-Themen 10
P Warten-Fenster Java Basics - Anfänger-Themen 8
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
A Bitte Warten Java Basics - Anfänger-Themen 2
P Externen Proceß starten und warten bis beendet? Java Basics - Anfänger-Themen 2
J Threads: warten bis erste aktion ausgeführt wurde Java Basics - Anfänger-Themen 6
G Eine Methode zum Warten? Java Basics - Anfänger-Themen 7
G Frage zum Warten auf und Aufwecken von Threads Java Basics - Anfänger-Themen 2
L Einfaches Warten in eine Schleife Java Basics - Anfänger-Themen 9
B auf mehrere Threads warten Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
S Auf JInternalFrame warten? Java Basics - Anfänger-Themen 2
R Warten, bis ein Prozess gestartet wurde Java Basics - Anfänger-Themen 23
M x Sekunden warten Java Basics - Anfänger-Themen 13
P Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.) Java Basics - Anfänger-Themen 2
M Wie lässt man eine Methode warten ohne Threads zu benutzen? Java Basics - Anfänger-Themen 8
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Radius von einer ellipse bestimmen Java Basics - Anfänger-Themen 7
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
M Zufallszahl generieren mit einer linken und rechten Grenze Java Basics - Anfänger-Themen 3
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben