Java Pause mit Zeit anlegen?
Hallo ihr lieben, ich habe ein Beispiel für euch:
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String textfromFeld1 = Feld1.getText();
Integer number = parseInt(textfromFeld1);
guess(number);
} catch (Exception error) {
text.setText("Bitte nur Zahlen angeben!");
|hier eine Pause für 3 sec |
Feld1.setText("");
text.setText("Geben sie bitte Zahl zwischen 0 und 100 ein!");
}
die Code stelle habe ich in ,,| " angezeigt.
Danke an alle Antworten.
Noch dazu zeigt dies einen Fehler
Was habe ich vergessen?
2 Antworten
Thread.sleep(3000); benutzt man normalerweise um Code zu pausieren, jedoch ist Swing Single-Threaded, heißt deine komplette Benutzeroberfläche würde 3 Sekunden lang auf nichts reagieren.
Falls du das vermeiden möchtest, denn das könnte die Nutzer sehr verwirren, benutze einen Timer, der den Code nach einer gewünschten Zeit ausführt:
import java.util.Timer;
import java.util.TimerTask;
...
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String textfromFeld1 = Feld1.getText();
Integer number = parseInt(textfromFeld1);
guess(number);
} catch (Exception error) {
text.setText("Bitte nur Zahlen angeben!");
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
Feld1.setText("");
text.setText("Geben sie bitte Zahl zwischen 0 und 100 ein!");
}
}, 3000);
}
}
}
});
Komisch.. Und wenn du 'nen Swing Timer benutzt? Kommen dann auch noch Fehler?
import javax.swing.Timer;
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String textfromFeld1 = Feld1.getText();
Integer number = parseInt(textfromFeld1);
guess(number);
} catch (Exception error) {
text.setText("Bitte nur Zahlen angeben!");
Timer timer = new Timer(3000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
Feld1.setText("");
text.setText("Geben sie bitte Zahl zwischen 0 und 100 ein!");
}
});
timer.setRepeats(false);
timer.start();
}
}
});
Kannst du mir den Fehler mal schreiben?
Und beim dem neusten Screenshot in deiner Frage fehlt übrigens einfach nur eine schließende Klammer und ein Strichpunkt bei der gelben Markierung.
);
Wenn du das ergänzt kommt immernoch ein Fehler?
Okay danke ;) ,
Habe das Ergebnis was ich wollte. Tut mir leid mit der Klammer bin sehr neu in dem Gebiet.
Ok, passt :D
Kein Problem, passiert jedem mal. Und bitte ^^
Falls ich dir mit meinem Code helfen konnte würd ich mich über ein Hilfreich freuen :P
Thread.sleep(3000);
Hallo @ranger1111,
Danke für deine Antwort aber ich habe vor nicht denn ganzen Prozess anzuhalten und andere Sachen im Hintergrund weiterlaufen zu lassen
sehen sie mein Screenshot wissen sie so mehr?
Naja. Der Prozess wird schon solange schlafen. Vielleicht brauchst du eher einen Timer. TimerTask oder sowas.
Swing ist Single Threaded ... 🤦♂️
Dann ist sein komplettes UI für 3 Sekunden unresponsive
Was "na und"?
Eine ziemlich schlechte Lösung ist das, ein pausiertes UI sorgt beim Nutzer nur für Verwirrung, und außerdem werden alle Tasks unterbrochen.
Prinzipiell kann man's natürlich machen, ist eine valide Antwort, aber ich denke in dem Fall eher nicht zu empfehlen.
Wenn ich denn Code einfüge bekomme ich mehr als 22 Fehler