Dialogfeld nach 5 Sek automatisch öffnen

Hallo zusammen,
wie bekomme ich es hin, dass mein Programm nach 5 Sekunden automatisch ein Dialogfeld öffnet wenn ein Button nicht gedrückt wurde?
Momentan habe ich einen Timer erstellt der 5 Sekunden läuft und nachdem der Button gedrückt wurde, wird er gestoppt.
Jedoch weiß ich nicht wie ich es umsetzen soll, dass nach Ablauf des Timers ein Dialogfeld geöffnet wird.
Danke im Voraus für Antworten 🙂

Code:
public class DontScrewUp implements ActionListener{
JButton b1;
public static void main(String[] args) {
        (new DontScrewUp()).go();
    }
private void go() {
        z1=0;
f=new JFrame();
        f.setSize(1000,800);
        f.setLayout(new BorderLayout());
        f.setResizable(false);
        f.setTitle("Don't Screw Up!");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnlInhalt = new JPanel();
        pnlInhalt.setLayout(null);
        f.add(pnlInhalt, BorderLayout.CENTER);

        zeigeAufgabe();
    }
public void zeigeAufgabe(){
        //Inhalt leeren
        pnlInhalt.removeAll();
       
        //neuen Inhalt hinzufügen
        int e = (int)((Math.random()) * 7 + 1);   
       
        if(e == 1){
            b1=new JButton();
            b1.setBounds(330, 450, 300, 100);
            b1.setText("1");
            b1.addActionListener(this);
            pnlInhalt.add(b1);
            tf1=new JTextField();
            tf1.setBounds(100, 300, 800, 70);
            tf1.setText("Drücke den Knopf 1x!");
            Font font1 = new Font("SansSerif", Font.BOLD, 28);
            tf1.setFont(font1);
            tf1.setHorizontalAlignment(JTextField.CENTER);
            tf1.setEditable(false);
            Timer t1 = new Timer();
            t1.schedule(new TimerTask() {
                public void run() {
                    System.out.println("Timer läuft");
                }
            },5*10);
            pnlInhalt.add(tf1);
            pnlInhalt.repaint();
        }
f.setVisible(true);
    }
public void actionPerformed(ActionEvent a) {

        String cmd1 = a.getActionCommand();
        if(cmd1 == "1"){
            z1=z1+1;
            if(z1==1){
                b1.setEnabled(false);
                punktzahlAnzeigen();
                pnlInhalt.repaint();
                zeigeAufgabe();
                t1.cancel();
            }
        }
}
 
Du könntest es beispielsweise mit einem Flag machen (e.g. boolean Variable) welches auf true gesetzt wird wenn der Button gedrückt wurde und nachdem der Timer fertig ist prüfen ob das Flag gesetzt wurde. Wenn nicht kannst du ja den Dialog aufrufen 🙂
 
Also ich hab es jetzt mal versucht, leider hab ich das Problem das mein Programm die boolean Variable immer auf true setzt. Sprich der Timer wird immer sofort gestoppt wenn das Programm gestartet wird.
Code:
public class DontScrewUp implements ActionListener{
boolean ButtonGedrückt = false;
public static void main(String[] args) {
        (new DontScrewUp()).go();
    }

    private void go() {
        z1=0;
   
        f=new JFrame();
        f.setSize(1000,800);
        f.setLayout(new BorderLayout());
        f.setResizable(false);
        f.setTitle("Don't Screw Up!");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pnlInhalt = new JPanel();
        pnlInhalt.setLayout(null);
        f.add(pnlInhalt, BorderLayout.CENTER);

        zeigeAufgabe();
        f.setVisible(true);
    }

    public void zeigeAufgabe(){
        //Inhalt leeren
        pnlInhalt.removeAll();
       
        //neuen Inhalt hinzufügen
        int e = (int)((Math.random()) * 7 + 1);   
       
        if(e == 1){
            b1=new JButton();
            b1.setBounds(330, 450, 300, 100);
            b1.setText("1");
            b1.addActionListener(this);
            pnlInhalt.add(b1);
            tf1=new JTextField();
            tf1.setBounds(100, 300, 800, 70);
            tf1.setText("Drücke den Knopf 1x!");
            Font font1 = new Font("SansSerif", Font.BOLD, 28);
            tf1.setFont(font1);
            tf1.setHorizontalAlignment(JTextField.CENTER);
            tf1.setEditable(false);
            Timer t1 = new Timer();
            t1.schedule(new TimerTask() {
                public void run() {
                    System.out.println("x");
                    JOptionPane.showMessageDialog(pnlInhalt,"Game over!");
                }
            },5*10*100);
            if(ButtonGedrückt = true){
                t1.cancel();
            }
            pnlInhalt.add(tf1);
            pnlInhalt.repaint();
        }
public void actionPerformed(ActionEvent a) {

        String cmd1 = a.getActionCommand();
        if(cmd1 == "1"){
            z1=z1+1;
            if(z1==1){
                ButtonGedrückt=true;
                b1.setEnabled(false);
                punktzahlAnzeigen();
                pnlInhalt.repaint();
                zeigeAufgabe();
            }
        }

Wo liegt mein Fehler? 😕
 
Code:
if(ButtonGedrückt = true){
Das muss == true heissen. So ist es eine Zuweisung mit nachfolgender Überprüfung.
Anmerkung:
Code:
if(cmd1 == "1"){
sollte besser
Code:
if(cmd1.equals("1")){
heissen. Hier funktioniert es zwar, aber im Grunde möchtest du ja einen inhaltlichen Vergleich des String Objektes (cmd1) mit einem anderen machen ("1") und keinen Identitäts Vergleich.
 
Nun läuft der Timer einfach weiter obwohl der Button betätigt wurde. Ich weiß einfach nicht woran es liegt, das der Timer nicht stoppt. Normalerweise sollte sich, nachdem der Button betätigt wurde, die boolean Variable auf "true" ändern und der Timer somit gestoppt werden.
Den Vergleich haben wir so in der Schule beigebracht bekommen, da es sich um ein Projekt für meine Abiturprüfung handelt werde ich es hier noch beibehalten und für die nächsten Projekte ändern. 🙂
 
Den Vergleich haben wir so in der Schule beigebracht bekommen, da es sich um ein Projekt für meine Abiturprüfung handelt werde ich es hier noch beibehalten und für die nächsten Projekte ändern. 🙂
Dann solltest du deinen Lehrer mal drauf hinweisen, dass man Strings nicht mit == vergleicht. 😉

Nun läuft der Timer einfach weiter obwohl der Button betätigt wurde.
Wie sieht denn dein Code jetzt aus?
 
Ich werde ihn darauf Hinweisen 😀
Am Code hat sich nicht viel geändert
Code:
public class DontScrewUp implements ActionListener{

boolean ButtonGedrückt = false;

public static void main(String[] args) {
        (new DontScrewUp()).go();
    }

    private void go() {
        z1=0;
  
        f=new JFrame();
        f.setSize(1000,800);
        f.setLayout(new BorderLayout());
        f.setResizable(false);
        f.setTitle("Don't Screw Up!");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pnlInhalt = new JPanel();
        pnlInhalt.setLayout(null);
        f.add(pnlInhalt, BorderLayout.CENTER);

        zeigeAufgabe();
        f.setVisible(true);
    }

    public void zeigeAufgabe(){
        //Inhalt leeren
        pnlInhalt.removeAll();
      
        //neuen Inhalt hinzufügen
        int e = (int)((Math.random()) * 7 + 1);  
      
        if(e == 1){
            b1=new JButton();
            b1.setBounds(330, 450, 300, 100);
            b1.setText("1");
            b1.addActionListener(this);
            pnlInhalt.add(b1);
            tf1=new JTextField();
            tf1.setBounds(100, 300, 800, 70);
            tf1.setText("Drücke den Knopf 1x!");
            Font font1 = new Font("SansSerif", Font.BOLD, 28);
            tf1.setFont(font1);
            tf1.setHorizontalAlignment(JTextField.CENTER);
            tf1.setEditable(false);
            Timer t1 = new Timer();
            t1.schedule(new TimerTask() {
                public void run() {
                    System.out.println("Timer läuft");
                    JOptionPane.showMessageDialog(pnlInhalt,"Game over!");
                }
            },5*10*100);
            if(ButtonGedrückt == true){
                t1.cancel();
                t1.purge();
            }
            pnlInhalt.add(tf1);
            pnlInhalt.repaint();
        }
public void actionPerformed(ActionEvent a) {

        String cmd1 = a.getActionCommand();
        if(cmd1 == "1"){
            z1=z1+1;
            if(z1==1){
                ButtonGedrückt=true;
                b1.setEnabled(false);
                punktzahlAnzeigen();
                pnlInhalt.repaint();
                zeigeAufgabe();
            }
        }
 
Bitte Java-Tags benutzen. ......
Prinzipiell geht das so mit dem Panic-Button:
Java:
        JFrame f = new JFrame("NoTitle");
        f.add(new JLabel("press any key to avoid message..."));
        final Thread t = new Thread(() -> {
            while (true) {
                try {
                    Thread.sleep(5000);
                    JOptionPane.showConfirmDialog(f, "Taste nicht gedrückt");
                } catch (InterruptedException ie) {
                }
            }
        });
        t.start();
        f.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                t.interrupt();
            }
        });
        f.setSize(400, 400);
        //define a close behaviour...
        f.setVisible(true);

Daraus sollte alles ableitbar sein. Anstelle von showConfirmDialog auch ander.
Zum Thema Notaus bei Maschinen und Not-Halt-Einrichtungen gibt es ganze Vorlesungen. Beim Taster, bei dem man nicht alle 2 1/2 Minuten drückt, stoppt der gesamte Zug. Wie sinnvoll, dazu ganze Philosophievorlesungen.
 
Sieht ja so aus als würde dieser Vergleich nicht ganz hinhauen. Wie wäre es wenn du mal deinen ganzen Mut zusammennimmst und daraus
Code:
if("1".equals(cmd1) {
machst ?

Edit: und daraus:
Code:
String cmd1 = a.getActionCommand();
dann noch
Code:
String cmd1 = a.getText();
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben