Timer Konzept-Frage

WIng2005

Mitglied
Hallo werte Gemeinde,

ich stehe vor folgendem Problem:
Ich möchte einen Timer starten, der in einem eigenen Thread gewisse Aufgaben erfüllen soll. Diesen starte ich per Checkbox und möchte ihn über diese wieder deaktivieren. Er soll nach Deaktivieren jedoch genau noch 1x zu Ende laufen.

Der CheckBox habe ich einen ActionListener zugewiesen, der den Timer in einem neuen Thread startet. Dieser soll später periodisch per Socken Daten von einem Arduino holen und in eine Datenbank schreiben. Das Programm selbst merkt davon nichts, da es losgelöst in einem eigenen Thread läuft.

Java:
       checkBoxTimerActive.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                if (checkBoxTimerActive.isSelected()==true) {
                    Timer timer = new Timer();
                    timer.schedule(new MyTimerTask(), 0,20000);

                } else {
                    //How to stop?
                }
                
            }
        });


Der Timer selbst:

Java:
import java.util.TimerTask;

public class MyTimerTask  extends TimerTask {

    @Override
    public void run() {
        // do something

    }
}

Ich müsste doch eigentlich innerhalb des Timers prüfen, ob er von außen abgebrochen wurde. Wenn ja, einmal alles zu Ende bearbeiten und dann das Objekt löschen, oder? Oder wäre es hier besser, keinen Timer zu nehmen, sondern einen Thread und diesen dann zu pausieren?

VG
Steffen
 

Jw456

Top Contributor
Halo etwa so
Code:
checkBoxTimerActive.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                Timer timer = new Timer();
                MyTimerTask myTimerTask = new MyTimerTask();
                if (checkBoxTimerActive.isSelected() == true) {
                    timer.schedule(myTimerTask, 0, 20000);

                } else {
                    timer.cancel();
                    timer.schedule( myTimerTask, 20000);
                    //How to stop?
                }

            }
        });
 
Zuletzt bearbeitet:

Jw456

Top Contributor
Warum nicht einfach:
Java:
        timer.cancel();
        timer.purge();
Der Task wird weiterlaufen bis er zu Ende ist und nicht wieder gestartet.
Er will ihn ja nach erneuten Button Klick und deaktivier Checkbox noch einmal laufen lassen. Deshalb erst cancel und einmal starten mit einer Verzögerung seiner Wahl. Ja es könnten und werden wohl zwei werden. Kommt halt auf dem Zeitpunkt an.
 

WIng2005

Mitglied
Moin Moin zusammen,
Socken...jaja die Autokorrektur 😂 -> Socket war gemeint.
Also: Der Timer soll nur zu Ende laufen...sonst bleiben u.U. Sockets offen.
Aber: irgendwie ist ein Bock im Timer: Habe das die Nacht gegen 5 gestartet, 06:26 ist er abgestorben. Aber der Reihe nach:
Werden mit:
Java:
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), 0,period);

..2 Objekte gebildet? Müssten BEIDE danach manuell gelöscht werden oder macht das der GC?

Den Timer kennt er im Else-Zeig nicht, ist dann folgendes "Russisch", weil der Timer immer erstellt und im Else gleich wieder gelöscht wird?

Java:
checkBoxTimerActive.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                long period= 1000*(Long.parseLong(spinnerTimerVal.getValue().toString()));
                Timer timer = new Timer();
                if (checkBoxTimerActive.isSelected()==true) {
                    radioBtnTimerOn.setSelected(true);
                    timer.schedule(new MyTimerTask(), 0,period);
                } else {
                    timer.cancel();
                    timer.purge();
                }

            }
        });

EDIT: das bewirkt nichts.... der Timer läuft auch nach Chancen / pure munter weiter


Vielen Dank für eure Hilfe!

VG
Steffen
 
Zuletzt bearbeitet:

Robert Zenz

Top Contributor
Du willst vermutlich eine Referenz auf die eine Timer Instanz halten, im Moment erzeugst du bei jedem Klick einen neuen, da ist dann stoppen recht schwierig. Desweiteren koennte es schon sein dass der Garbage Collector die eine Timer Instanz einsammelt und vernichtet da du keine Referenz darauf haeltst, muesste ich aber nachschauen ob dem wirklich so ist oder ob es irgendetwas globales gibt dass den Timer am Leben haelt.
 

WIng2005

Mitglied
Was wäre denn, wenn der Timer "von innen" beendet wird
Java:
public boolean getCheckBoxTimer(){
        return checkBoxTimerActive.isSelected();
    }

.
.
.
    
checkBoxTimerActive.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                
                if (checkBoxTimerActive.isSelected()==true) {
                    long period= 1000*(Long.parseLong(spinnerTimerVal.getValue().toString()));
                    Timer timer = new Timer();
                    radioBtnTimerOn.setSelected(checkBoxTimerActive.isSelected());
                    timer.schedule(new MyTimerTask(), 0,period);
                }
                

            }
        });




//Am Ende vom Timer:

if (Main.mainFrame.getCheckBoxTimer()==false) {
            Main.mainFrame.setRadioTimerActive(false);
            this.cancel();
        }
 

Robert Zenz

Top Contributor
Ich weisz jetzt gerade nicht was this.cancel() macht, aber Nein, eher nicht.

Du musst eine Instanz auf den Timer halten damit du spaeter diesen Timer auch beenden kannst.
 

WIng2005

Mitglied
Hatte es zwischenzeitlich trotzdem mal probiert...geht aber. Ich habe nur keine Ahnung, ob mein Timer-Objekt danach im Orbit versauert.
Lasse mein Programm grad mal im Dauerlauf.... läuft, und das ohne, wie für mich üblich 😂, den RAM zu füllen...

Deine Variante würde mich aber trotzdem mal interessieren.... wie genau mache ich das? Den Timer ausserhalb der IF anlegen und prüfen, ob !=Null?

Java:
@Override
            public void actionPerformed(ActionEvent e) {
                Timer timer;
                if (checkBoxTimerActive.isSelected()==true) {
                    long period= 1000*(Long.parseLong(spinnerTimerVal.getValue().toString()));
                    timer = new Timer();
                    radioBtnTimerOn.setSelected(checkBoxTimerActive.isSelected());
                    timer.schedule(new MyTimerTask(), 0,period);
                } else {
                    radioBtnTimerOn.setSelected(false);
                    if (timer != null){
                        timer.cancel();    [B]//IDE meckert, dass Timer ggf. nicht initialisiert wurde[/B]
                        timer.purge();
                    }   
                }
                }

VG
Steffen
 

WIng2005

Mitglied
OK...habe beides mal versucht.... die Variante mit Erstellung im Listender funktioniert nicht (wie oben schon angemerkt). Die Variante als Instanzvariable und dann:

Java:
  public Timer timer;
  .
  .
  .
        checkBoxTimerActive.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //Timer timer;
                if (checkBoxTimerActive.isSelected()==true) {
                    long period= 1000*(Long.parseLong(spinnerTimerVal.getValue().toString()));
                    timer = new Timer();
                    radioBtnTimerOn.setSelected(checkBoxTimerActive.isSelected());
                    timer.schedule(new MyTimerTask(), 0,period);
                } else {
                    radioBtnTimerOn.setSelected(false);
                    if (timer != null){
                        timer.cancel();
                        timer.purge();
                    }
                }
            }
        });

...läuft.
 

Oneixee5

Top Contributor
Java:
    private static class CheckBoxListener implements ActionListener {

        private final Timer timer = new Timer();
        private final SpinnerNumberModel spinnerModel;

        CheckBoxListener(final SpinnerNumberModel spinnerModel) {
            this.spinnerModel = spinnerModel;
        }

        @Override
        public void actionPerformed(final ActionEvent event) {
            final JCheckBox checkBox = (JCheckBox) event.getSource();
            if (checkBox.isSelected()) {
                final long period = 1000 * ((Number) this.spinnerModel.getValue()).longValue();
                this.timer.schedule(new MyTimerTask(), 0, period);
            } else {
                this.timer.cancel();
            }
        }

    }

    ...
      
        final SpinnerNumberModel spinnerModel = new SpinnerNumberModel(...);
        final JSpinner spinnerTimerVal = new JSpinner(spinnerModel);
      
        final JRadioButton radioBtnTimerOn = new JRadioButton(...);

        final JCheckBox checkBoxTimerActive = new JCheckBox(...);
        checkBoxTimerActive.addActionListener(new CheckBoxListener(spinnerModel));
        checkBoxTimerActive.addActionListener(
                event -> radioBtnTimerOn.setSelected(checkBoxTimerActive.isSelected()));

    ...
 
Zuletzt bearbeitet:

WIng2005

Mitglied
uff.....davon verstehe ich die Hälfte nicht....(-> ich sollte dringend meinen Udemy-Kurs weitermachen) aber danke für deine Mühe!!!

Die Variante von oben funktioniert erstmal....vllt. nicht ganz so sauber programmiert. Für einen ersten Wurf und im Rahmen meiner Fähigkeiten bin ich ganz zufrieden. Für den Rest muss ich mir dringend mehr Wissen aneignen :)

Ich denke, wir können dann hier zumachen. Danke an alle !!
VG
Steffen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Timer terminiert nicht Allgemeine Java-Themen 5
Z Timer Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
Tacofan Kurzer Timer Allgemeine Java-Themen 22
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
wolfgang63 Best Practice Taktgeber oder Timer mit variablem Intervall Allgemeine Java-Themen 1
I Timer Allgemeine Java-Themen 1
X Timer Allgemeine Java-Themen 3
C Timer? Allgemeine Java-Themen 8
U Timer - Timertask endet nicht Allgemeine Java-Themen 4
X timer.schedule - Allgemeine Java-Themen 7
D Simpler Timer zum warten Allgemeine Java-Themen 19
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
G Threads Timer wird unterbrochen Allgemeine Java-Themen 20
P Java Timer Allgemeine Java-Themen 3
K Timer Thread Allgemeine Java-Themen 8
E Wie Timer anbringen mit Designer in Netbeans Allgemeine Java-Themen 5
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
O Timer pausieren Allgemeine Java-Themen 5
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
B util.Timer zu langsam? Allgemeine Java-Themen 3
P Java Timer Allgemeine Java-Themen 2
S Timer in Applet? Allgemeine Java-Themen 11
G Swing Timer führt Methode nicht aus Allgemeine Java-Themen 2
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
T Timer oder Alternative? Allgemeine Java-Themen 3
Z Timer -> Thread jeden Tag ausführen Allgemeine Java-Themen 5
D Probleme mit einem Timer Allgemeine Java-Themen 6
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
S Problem mit einem Timer (Aktualisierung etc.) Allgemeine Java-Themen 2
B Timer übergabe Allgemeine Java-Themen 3
G Timer abbrechen und neu starten Allgemeine Java-Themen 3
G timer mit buttondruck abbrechen Allgemeine Java-Themen 7
T Timer oder ähnliches? Allgemeine Java-Themen 3
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
O Thread als Timer Interrupt Allgemeine Java-Themen 2
C Timer.scheduleAtFixedRate(). Allgemeine Java-Themen 5
H gibts in Java sowas wie in Visual Basic den Timer? Allgemeine Java-Themen 5
B 24 Uhr Timer Task Allgemeine Java-Themen 5
G Timer nur 64 mal pro Sekunde? Allgemeine Java-Themen 18
S Frage zu jTDS, JAVA allgemein und Timer Allgemeine Java-Themen 6
L Problem mit Timer Allgemeine Java-Themen 7
J Timer-Objekt / Task-Zustand ermitteln Allgemeine Java-Themen 5
S Suche Konzept: Korrektheit des Aufrufers feststellen Allgemeine Java-Themen 7
J MVC Konzept Allgemeine Java-Themen 1
reibi log4j - Bestes Konzept Allgemeine Java-Themen 10
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
D GUI-Controller Konzept Allgemeine Java-Themen 6
G UML Konzept Allgemeine Java-Themen 3
M Backend Entwicklung - Konzept fragen Allgemeine Java-Themen 3
E Wie anfangen? Konzept / Designfrage Allgemeine Java-Themen 17
R Konzept eines Software-Rollout/Synchronisation via WebService Allgemeine Java-Themen 5
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
MQue Thread Konzept Allgemeine Java-Themen 8
G MVC-Konzept - effizienz beim "notify" Allgemeine Java-Themen 2
MQue Konzept- Frage zum Button-Aktualisieren Allgemeine Java-Themen 5
S Frage zum Java-Konzept Allgemeine Java-Themen 6
H GUI - Konzept Allgemeine Java-Themen 3
S Konzept: Innere Klasse, Anwendungsbeispiel? Allgemeine Java-Themen 4
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
T Eine Frage des Designs Allgemeine Java-Themen 2
C Frage zu eigenem TableCellRenderer Allgemeine Java-Themen 11
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
J Frage zu System.getproperties. Allgemeine Java-Themen 60
molat100 wie kann man die Frage beantworten Allgemeine Java-Themen 1
pkm Frage zur Präzision von Calendar.WEEK_OF_YEAR Allgemeine Java-Themen 12
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
F Frage zu System.in Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
B For-Loop Frage Allgemeine Java-Themen 21
L Java frage Allgemeine Java-Themen 3
bueseb84 Frage zu Mock und UpperBound Allgemeine Java-Themen 2
M Frage zum Konstruktor Allgemeine Java-Themen 2
W Best Practice Frage zur Umsetzung MVC Allgemeine Java-Themen 9
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
B Frage zu Unit-Tests Allgemeine Java-Themen 6
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
O Frage zum Runtimeverhalten von Java ... Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
D Frage zu Vererbung Allgemeine Java-Themen 5
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Frage zur JLS Allgemeine Java-Themen 0
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben