[JAVA] Verzögerung

Neue Frage »

Auf diesen Beitrag antworten »
cus [JAVA] Verzögerung

Hallo, wollte das die zahlen 0-9 im Label zahlL nach einer kleinen verzögerung
nacheinander angezeigt werden.
Allerdings hängt sich das ganze bei Druck auf den Button StartB auf.
das ganze wurde in der Umgebung BlueJ programmiert.
Syntaxfehler wurden nicht festgestellt. Hier der kleine wichtige ausschnitt:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
public void verzögerung(){
        try{
                Thread.sleep(2000);
            } catch(Exception e) {
            }
    }
    public void actionPerformed(ActionEvent e){
        Object obj e.getSource();
        
        if(obj == startB){
            for(int i=0i<10i++){
                zahlL.setText(""+i);
                verzögerung();
            }
 
Auf diesen Beitrag antworten »
Tobias

Ich kann nicht nachvollziehen, was du da machst. Aber ich empfehle dir mal einen Blick auf die Klassen Tmer und TimerTask.
Auf diesen Beitrag antworten »
ed209

Hängt sich das Programm wirklich auf, oder macht es nur 20 Sekunden nichts?
Bin kein großer Swing-Experte, aber ich schätze daß du das ganze Eventsystem für diese Zeit lahm legst.

Sobald du auf den Knopf drückst, geht der Kontrollfluß in deinen ActionListener und blockiert dort zehn mal 2000ms. Vermutlich kommen damit dann auch nicht mehr die Routinen die dein Label zeichnen zum Zug.

Du könntest also so einen Timer benutzen wie Tobias vermutlich vorgeschlagen hat. Deine Schleife in einen eigenen Thread auszulagern könnte auch helfen, wobei Du Dir damit schnell noch mehr Probleme machst weil du mehrere Threads gleichzeitig hast (Was passiert, wenn du zweimal auf den Knopf drückst usw.)

Gruß,
ED
Auf diesen Beitrag antworten »
JoTheGunny RE: [JAVA] Verzögerung

es hängt sich nicht auf, sondern du lässt den Haupt-Thread damit warten. Lass durch die aktion einen neuen Thread starten, der das ausführt, dann geht es.
So würde ich es machen ( die objekte, wie Button und Label sind hierbei nicht enthalten, also erst einfügen, dann geht es )

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
public class MyActionListener implements ActionListenerRunnable
{
private Main owner// Die klasse, das Label und Button enthält

private Thread t;

public MyActionListenerMain m )
{
this.owner m;
}

public void run()
{
for(int i=0i<10i++)
{
this.owner.zahlL.setTextString.valueOf) );
try
{
Thread.sleep2000 );
}
catch( InterruptedException IX )
{
}

// den Thread auf null setzen, damit die aktion
// wiederholt werden kann
this.null;
}
public void actionPerformedActionEvent e)
{
if( this.== null && e.getSource() == this.owner.startB )
{
this.= new Thread(this);
this.t.start();
}
}
}
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »