Dialogfeld nach 5 Sek automatisch öffnen

S

Sweetmuffin98

Mitglied
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();
            }
        }
}
 
Robat

Robat

Top Contributor
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 :)
 
S

Sweetmuffin98

Mitglied
Das ist eine gute Idee, ich werde versuchen ob ich das so umgesetzt bekomme und berichten ob es funktioniert hat :) Dankeschön :)
 
S

Sweetmuffin98

Mitglied
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? :confused:
 
X

X5-599

Top Contributor
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.
 
S

Sweetmuffin98

Mitglied
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. :)
 
Robat

Robat

Top Contributor
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?
 
S

Sweetmuffin98

Mitglied
Ich werde ihn darauf Hinweisen :D
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();
            }
        }
 
X

Xyz1

Gast
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.
 
JStein52

JStein52

Top Contributor
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:
S

Sweetmuffin98

Mitglied
Danke an @DerWissende für den Tipp, es hat super funktioniert. Ich hab meinen Code etwas abgeändert und statt t.interrupt habe ich t.stop verwendet und es hat geklappt :):)
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Das geht aber schöner ohne eigene Threads und Interrupt oder Stop - ein boolean ist da schon der bessere Weg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JOptionPane 2 Angaben in ein Dialogfeld Java Basics - Anfänger-Themen 7
G kein text im dialogfeld Java Basics - Anfänger-Themen 3
D Drucken ohne Dialogfeld Java Basics - Anfänger-Themen 2
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
UnknownInnocent Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
UnknownInnocent Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
B Umbruch nach bestimmten Wort Java Basics - Anfänger-Themen 5
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
N Arbeitsspeicher nach kompilieren immer voller Java Basics - Anfänger-Themen 6
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
J GUI wird direkt nach dem erstellen weiß übermalt Java Basics - Anfänger-Themen 3
L Programm zur Codieren nach Rotx Java Basics - Anfänger-Themen 1
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
M Array nach String durchsuchen und zurückgeben Java Basics - Anfänger-Themen 16
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
S String trennen nach beliebigen Zeichen Java Basics - Anfänger-Themen 3
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
O Array nach gleichen Zahlen prüfen und ausgeben Java Basics - Anfänger-Themen 6
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
G nach 9 - stelliger Nummer suchen Java Basics - Anfänger-Themen 7
S Wie verwende ich ne aus einer Schleife nach der Schleife? Java Basics - Anfänger-Themen 9
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
D Liste nach 2 gleichen Einträgen suchen Java Basics - Anfänger-Themen 4
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
S OOP Button erst nach 2x klicken deaktivieren Java Basics - Anfänger-Themen 4
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
F Koordinaten nach 360° auf 0° setzen Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
S Sound stoppen und nach Pause wieder abspielen Java Basics - Anfänger-Themen 6
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
J fehler nach windows update Java Basics - Anfänger-Themen 44
F Wort nach String ausgeben Java Basics - Anfänger-Themen 5
J doppelname nach schlüsselwort extends Java Basics - Anfänger-Themen 4
M Array nach Zehnen durchsuchen. Java Basics - Anfänger-Themen 25
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
S abbruch nach Ausführung eines ActionListeners...warum? Java Basics - Anfänger-Themen 6
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
L Javaprogramm nach ausführung des gesammten Cods neu beginnen lassen Java Basics - Anfänger-Themen 9
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
Viktormk Methoden Gleitpunktzahlen nach IEEE 754 addieren ! Java Basics - Anfänger-Themen 1
M String nach float Konvertieren Java Basics - Anfänger-Themen 23
K Sortierung eines int-Arrays von groß nach klein Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
Clarence Weinberg Eclipse: Package wird erst nach Neustart aktuallisiert Java Basics - Anfänger-Themen 1
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
R Card Layout refresh nach Änderung Java Basics - Anfänger-Themen 1
F Dialog wird nach Schließung neu geöffnet Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben