Ausgabe nach 20sek und eventuell unterbrechen

hubi14nrw14

Mitglied
Hi, ich habe folgenden Code wo eine Ausgabe 20sek später folgt, als eine andere und ich würde gerne wissen, ob es irgendwie möglich ist zum Beispiel durch einen mausklick oder ähnliches das nicht die 20sek gewartet wird, sondern, wenn irgendwas gemacht, die zweite Ausgabe sofort kommt. Ist das irgendwie möglich?

Java:
public static void main(String[] args) throws InterruptedException {

        System.out.println("Test");
        Thread.sleep(20000); 
        System.out.println("Test2");
      
    }
 
Also eine einfache Lösung wäre evtl z.B. in einer Schleife 20mal jeweils eine Sekunde zu warten und dazwischen jeweils deine Abbruchbedingung zu prüfen. Ist die Bedingung wahr, brichst du die Schleife ab und kommst sofort zu deiner Ausgabe, ist die Bedingung falsch gehst du in den nächsten Schleifendurchlauf und wartest erneut eine Sekunde.
Oder machst du dabei irgendwas asynchrones in Threads?
 
Code:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JComponent;
import javax.swing.Timer;

public class WaitTimeSpanForActionOrClick extends MouseAdapter implements ActionListener {
    private Timer timer = null;
    private boolean finished = false;

    public WaitTimeSpanForActionOrClick(JComponent c, int delay) {
        c.addMouseListener(this); // bind mouse panel
        timer = new Timer(delay, this); // timer calls actionPerformed()
        timer.start();
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        doAction(); // action after delay
    }

    private void doAction() {
        timer.stop();
        System.out.println("test2");
        finished = true;
    }

    public boolean isFinished(){
        return finished;
    }
    @Override
    public void mouseClicked(MouseEvent arg0) {
        doAction(); // action after click
    }

}
Die Klasse macht genau das. 😉
 
Zuletzt bearbeitet:

Zurück
Oben