CountDown wird durch JOptionPane unterbrochen

Ingerten

Bekanntes Mitglied
Hallo Männers,

ich habe mir einen kleinen Counter programmiert, wo ein CountDown runter läuft, bei einer Minute geht ein JOptionPane auf und sagt, das er nur noch 1 Minute hat, aber der Counter wartet so lange bis ich das JOptionPane wieder geschlossen habe, erst dann läuft der CountDown weiter.

Frage:
Gibt es da eine Möglichkeit, das der CountDown weiter läuft, wenn das JOptionPane offen ist?

Java:
public void startCount() {
    // GUI erzeugen
    //CountDown countdown = new CountDown();
   
    // Timer erzeugen, jede 1000 Millisekunden (= 1 Sekunde)
    // Methode actionPerformed aufrufen.
    CountDown.timer = new Timer(1000, new ActionListener() {
     
      

	public void actionPerformed(ActionEvent e) {
        // 1 Sekunde abziehen
        CountDown.counterValue--;
        sec--;
        int min = counterValue/60;
        
        // Zahl in Label darstellen
        Frame.lblNewLabel.setText(String.valueOf(min) + " min  " + String.valueOf(sec) + " sec");
       
         if(sec == 0 && min == 1){
          System.out.println("nur noch 1 Minute!");
          JOptionPane.showMessageDialog(null,"nur noch 1 Minute bis der PC ausgeschalten wird!",  "Meldung", JOptionPane.INFORMATION_MESSAGE, null); 
        }
        
        if(sec == 0){
            System.out.println("sec auf 60 gesetzt!");
            sec = 60;
          }
        
        // Falls Zähler = 0, Countdown abgelaufen!
        if(counterValue == 0 && min == 0){
            System.out.println("Zeit ist abgelaufen!");
            Frame.lblNewLabel.setText("Zeit ist ausgelaufen!");
            // Timer stoppen
            CountDown.timer.stop();
          }
        
        if(abbrechen.equals("stop")){
            System.out.println("Countdown wurde abgebrochen!");
            Frame.lblNewLabel.setText("Countdown wurde abgebrochen!");
            // Timer stoppen
            CountDown.timer.stop();
            abbrechen="go";
          }
      }
    });
       
    
  }
 
Zuletzt bearbeitet:

Joose

Top Contributor
Das JOptionPane wird im selben Thread gezeichnet und angezeigt wie dein Counter läuft. Da bei einem JOptionPane auf eine "Antwort" gewartet wird bleibt der Thread solange stehen.
Lagere die Anzeige des JOptionsPane aus.
 

Ingerten

Bekanntes Mitglied
Zeigen kann ich dir noch nichts, weil ich mir eben nicht sicher bin, ob es der richtige Ansatz ist, aber was ich mir überlegt habe, ich baue mir ein zweiten Thread und kontrolliere parallel zu dem Thread, wo der Counter drin läuft, die Eigenschaften für meine if-Anweisung.

Ich hoffe, das versteht jemand.
:D
 
Zuletzt bearbeitet:

Joose

Top Contributor
Probiere es einfach aus: Schreibe den Code, teste und wenn es nicht klappt dann frag wieder (inkl. deinen neuen Code)
 

Ingerten

Bekanntes Mitglied
Hast du nicht so einen kleinen Tipp.
Ist das sinnvoll mit dem Thread oder kann man das vielleicht mit einem ChangeListener realisieren?

:reflect:
 

Joose

Top Contributor
Hast du nicht so einen kleinen Tipp.

Mein Tipp: Lager die Anzeige des JOptionsPanes aus ;)

Ist das sinnvoll mit dem Thread oder kann man das vielleicht mit einem ChangeListener realisieren?

Was erwartest du dir vom "ChangeListener"? Was soll dieser bringen?
Was hindert dich daran beide Varianten auszuprobieren?

PS: Sachen teilweise auszuprobieren geht meist schneller als auf eine Antwort im Forum zu warten :)
 
Zuletzt bearbeitet:

Ingerten

Bekanntes Mitglied
So, ich habe es hin bekommen, was ich mich frage, ist es auch gut und richtig, so wie ich es gemacht habe?

Frisst so ein Thread eigentlich viele ressourcen, sollte man bei Threads auf was bestimmtes achten, was sind eure Erfahrungen?

Besten Dank erstmal, euch beiden.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import javax.swing.WindowConstants;


public class CountDown extends JFrame {
 
  // Countdown mit 42 Sekunden
  public static int counterValue;
  public static int sec;
  public static Timer timer;
  public static Timer timerEineMin;
  public static JLabel label;
  public static String abbrechen = "go";
  public static FrameNurNochEineMin frame;
  
  public CountDown() {
	  startCount();
  }


  public void startCount() {
    // GUI erzeugen
    //CountDown countdown = new CountDown();
   
    // Timer erzeugen, jede 1000 Millisekunden (= 1 Sekunde)
    // Methode actionPerformed aufrufen.
    timer = new Timer(1000, new ActionListener() {
     
      

	public void actionPerformed(ActionEvent e) {
        // 1 Sekunde abziehen
        counterValue--;
        sec--;
        int min = counterValue/60;
        
        // Zahl in Label darstellen
        Frame.lblNewLabel.setText(String.valueOf(min) + " min  " + String.valueOf(sec) + " sec");
       
         if(sec == 2 && min == 1){
          System.out.println("nur noch 1 Minute!");
          timerEineMin.start();
        }
        
        if(sec == 0){
            System.out.println("sec auf 60 gesetzt!");
            sec = 60;
          }
        
        // Falls Zähler = 0, Countdown abgelaufen!
        if(counterValue == 0 && min == 0){
            System.out.println("Zeit ist abgelaufen!");
            Frame.lblNewLabel.setText("Zeit ist ausgelaufen!");
            // Timer stoppen
            timer.stop();
          }
        
        if(abbrechen.equals("stop")){
            System.out.println("Countdown wurde abgebrochen!");
            Frame.lblNewLabel.setText("Countdown wurde abgebrochen!");
            // Timer stoppen
            timer.stop();
            abbrechen="go";
          }
      }
    });
       
    timerEineMin = new Timer(2000, new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null,"nur noch 1 Minute bis der PC ausgeschalten wird!",  "Meldung", JOptionPane.INFORMATION_MESSAGE, null);
				timerEineMin.stop();
	      }
	  });
    
  }
  
}
 

chuxXo

Bekanntes Mitglied
Ich find deine "main" Methode nicht :)

Anstatt deinem String "abbrechen" könntest dir ja ein boolean "status" oder der ähnlichen anlegen :)

Ich bin auch Einsteiger, aber wo ist dein Thread ?

Und was bringt das hier ?
Java:
public CountDown() {
	  startCount();
  }

Du hast doch einfach einen zweiten ActionListener gemacht ?!
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Alternativ: Nicht JOptionPane verwenden, sondern selbst einen JDialog aufbauen - den kann man modal oder nicht-modal machen.
Ist imo zwar die schönere Lösung, aber vmtl. eher mehr Aufwand als den JOptionPane in 'nen eigenen Thread zu sperren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
missy72 Methoden Calendar/Date Countdown Allgemeine Java-Themen 9
J Countdown für Datum und Uhrzeit Allgemeine Java-Themen 4
snipesss Visueller Countdown in JFrame Allgemeine Java-Themen 1
Tacofan JAVA Countdown Allgemeine Java-Themen 10
A Methoden Countdown Allgemeine Java-Themen 10
R "Countdown" Implementierung Allgemeine Java-Themen 5
M Countdown mit Besonderheiten Allgemeine Java-Themen 9
T Countdown -> Sekunden anzeigen Allgemeine Java-Themen 4
J Countdown probleme Allgemeine Java-Themen 5
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
G Popup wird nicht sichtbar Allgemeine Java-Themen 9
8u3631984 Funktions Parameter mit Lombok "NonNull" annotieren wird in Jacococ Testcoverage nicht herausgefiltert Allgemeine Java-Themen 3
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Y MVVM wie wird Eventhandler tausch geregelt Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
N warum wird es doppelt ausgegeben Allgemeine Java-Themen 6
A code wird nicht ausgeführt Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
T Schaltfläche wird nicht gefunden Allgemeine Java-Themen 4
N Eingabe wird immer als "false" ausgegeben Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
R Warum wird mir in der Konsole das "Standard Array" ausgegeben? Allgemeine Java-Themen 2
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
hello_autumn Java_Home geändert auf Java 13, trotzdem wird Java Version 8 angezeigt. Allgemeine Java-Themen 2
Thallius Char +1 wird int? Allgemeine Java-Themen 7
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
F Scrollbar wird nicht angezeigt Allgemeine Java-Themen 0
B Discord Bot - Funktion wird nicht aufgerufen Allgemeine Java-Themen 1
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
S If-Menü wird doppelt ausgegben Allgemeine Java-Themen 4
P Variable wird in for - loop nicht richtig hochgezählt Allgemeine Java-Themen 11
S Wird bei den JREs 9, 10, 11+ ueberhaupt noch Bytecode ausgefuehrt..? Allgemeine Java-Themen 8
FRI3ND JFrame wird nicht angezeigt Allgemeine Java-Themen 3
T Plötzlich wird package nicht mehr gefunden Allgemeine Java-Themen 3
X Klassen File-Klasse wird als Directory markiert Allgemeine Java-Themen 8
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
mrbig2017 Threads wait wird nicht durch notify beendet! Allgemeine Java-Themen 3
kodela Klassen Klassenvariable wird nicht gesetzt Allgemeine Java-Themen 23
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
kodela Drücken der ALT-Taste wird nur bei jedem zweiten Mal erkannt Allgemeine Java-Themen 5
Arif Input/Output Serialisierung - Datei wird nicht erzeugt Allgemeine Java-Themen 3
D Cursor unsichtbar, wenn Kontextmenü aufgerufen wird Allgemeine Java-Themen 5
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
The Pi Wie oft wird ein Buchstabe in einem Wort wiederholt? Allgemeine Java-Themen 16
N Datentypen If-Statement wird "übersprungen" Allgemeine Java-Themen 2
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
T Java wird nicht gefunden Allgemeine Java-Themen 32
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
Sin137 Interface Eingabe wird doppelt angezeigt Allgemeine Java-Themen 2
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
N Maven ObjectMapper Error wenn das File gespeichert wird Allgemeine Java-Themen 0
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wert in Variable schreiben, wenn diese gerade genutzt wird Allgemeine Java-Themen 10
E Java wird beendet nach paar Sekunden Allgemeine Java-Themen 14
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
O Programm wird einfach "gekillt" Allgemeine Java-Themen 3
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
B Abfragenteil wird nicht aufgerufen Allgemeine Java-Themen 2
Todesbote JFileChooser im Vordergrund (*.jar wird mittels shell_exec in PHP aufgerufen) Allgemeine Java-Themen 1
T Sicherheitshinweis - Zertifikat wird angefordert Allgemeine Java-Themen 5
L SetBounds wird vor dem Konstruktorcode aufgerufen - Wenn Startleiste links Allgemeine Java-Themen 1
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
P Wird double und float auf jedem Computer gleich berechnet? Allgemeine Java-Themen 10
G Tabelle wird nicht richtig dargestellt Allgemeine Java-Themen 9
HarleyDavidson Threads ProgressMonitor wird nicht angezeigt! Allgemeine Java-Themen 6
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
A Long variable wird negativ??? Allgemeine Java-Themen 1
J CSV Datei wird ungewollt umformatiert Allgemeine Java-Themen 5
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
I Java Applet wird immer blockiert Allgemeine Java-Themen 3
E Java Editor Klasse wird nicht weiter ausgeführt Allgemeine Java-Themen 4
S Java Applet wird dauerhaft blockiert Allgemeine Java-Themen 1
I Datei wird nicht richtig gelöscht Allgemeine Java-Themen 7
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
D Input/Output Datei wird lokal aber nicht vom Webserver ausgelesen... Allgemeine Java-Themen 2
F Nach Export wird PDF Datei nicht mehr gefunden Allgemeine Java-Themen 0
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
D ActionListener wird mit jedem Mal öfter aufgerufen Allgemeine Java-Themen 2
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
I Projekt wird nicht erstellt Allgemeine Java-Themen 2
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
A Threads Log4J Logger wird "überschrieben" Allgemeine Java-Themen 3
P Check, welche Java Version installiert bevor ein Programm ausgeführt wird. Allgemeine Java-Themen 12
J batch datei wird nicht aufgerufen Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben