Java Pause mit Zeit anlegen?


09.10.2021, 00:28

Noch dazu zeigt dies einen Fehler


09.10.2021, 00:45

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);
           }
        }
    }
});
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf
DonGoldi 
Fragesteller
 09.10.2021, 00:37

Wenn ich denn Code einfüge bekomme ich mehr als 22 Fehler

0
MrAmazing2  09.10.2021, 00:42
@DonGoldi

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();
        }
    }
});
1
MrAmazing2  09.10.2021, 00:49
@DonGoldi

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?

1
DonGoldi 
Fragesteller
 09.10.2021, 00:51
@MrAmazing2

Okay danke ;) ,

Habe das Ergebnis was ich wollte. Tut mir leid mit der Klammer bin sehr neu in dem Gebiet.

1
MrAmazing2  09.10.2021, 00:53
@DonGoldi

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

2
Thread.sleep(3000);
Woher ich das weiß:Studium / Ausbildung – Informatik studiert und mit PCs & Technik beschäftigt
MrAmazing2  09.10.2021, 00:24

Swing ist Single Threaded ... 🤦‍♂️

Dann ist sein komplettes UI für 3 Sekunden unresponsive

0
MrAmazing2  09.10.2021, 00:33
@ranger1111

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.

0
DonGoldi 
Fragesteller
 09.10.2021, 00:27

Hallo @ranger1111,

Danke für deine Antwort aber ich habe vor nicht denn ganzen Prozess anzuhalten und andere Sachen im Hintergrund weiterlaufen zu lassen

0
DonGoldi 
Fragesteller
 09.10.2021, 00:28
@ranger1111

sehen sie mein Screenshot wissen sie so mehr?

0
ranger1111  09.10.2021, 00:33
@DonGoldi

Naja. Der Prozess wird schon solange schlafen. Vielleicht brauchst du eher einen Timer. TimerTask oder sowas.

0