ich will ein Programm schreiben, bei dem etwas in einem JTextField ausgegeben wird, danach ne Zeit gewartet wird und wenn diese vorüber ist, wieder etwas anderes in das JTextField geschrieben wird. Wollte das mit System.sleep() machen. Ist das eine gute Methode oder gibts da noch was besseres?
Hier mein Code:
Ok danke,
hatte vorhin nur vergessen, das eigentliche Problem anzusprechen,
wenn ich das so mache wie oben beschrieben, dann wird der 1. Text nicht ausgegeben,
sondern nur der 2. nachdem der Timer gestartet und abgelaufen ist...
solange der AWT-Thread einen ActionListener ausführt und da vielleicht schläft, macht er nix anderes, auch kein repaint,
starte alle längerfristigen Aktionen in einem separaten Thread:
Runnable r = new Runnable() {
public void run() {
// Code, am besten nur ein Methodenaufruf, darin dann all der Code
}
}
new Thread(r).start();
Runnable r = new Runnable(){
public void run() {
try{
Thread.currentThread().sleep(5000);//sleep for 5000 ms
field.setText("Fertig");
}
catch(InterruptedException e1){
e1.printStackTrace();
}
}
new Thread(r).start();
Kannst du evtl. mal deinen funktionierenden Code hier reinposten? Hab nämlich in etwa das gleiche Problem (will alle 2 Sekunden meine JLabels automatisch "updaten" und das 90 Sekunden lang, nachdem ein Start-Button angeklickt wurde).
Edith: Habs jetzt auch hingekriegt, also brauchst nix mehr zu schreiben.
//Aktion die vorher ausgeführt werden sollRunnable r =newRunnable(){publicvoidrun(){try{Thread.currentThread().sleep(2000);//Aktion nachher }catch(InterruptedException e1){
e1.printStackTrace();}}};newThread(r).start();
Ah, du hast das mit Thread (bzw. Runnable) gemacht. Ich hatte Timer verwendet.
Zur Vervollständigung hier mal meine (allgemeine) Lösung:
Java:
publicvoidactionPerformed(ActionEvent evt){...if(source == button){ActionListener taskPerformer =newActionListener(){publicvoidactionPerformed(ActionEvent evt){
i++;// Iterator, den ich für die Abbruchbedingung brauche// mein Code mit den Änderungen der Labelsif(i == abbruchbedingung)this.notify();}};newTimer(800, taskPerformer).start();