Timer oder Thread, das ist hier die Frage

  • Themenstarter Themenstarter Gelöschtes Mitglied 9226
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gelöschtes Mitglied 9226

Gast
Hallo zusammen,

heute habe ich folgende interessante Frage:


Ich habe eine Anwendung erstellt, die in einem festen Intervall immer wieder die gleichen Aufgaben durchführen soll. Quasi zeitgesteurt, vollautomatisch.

Leider komme ich mit den JAVA-Timern nicht so zurecht, wie ich es gern hätte.


Wie kann ich also meiner Anwendung sagen:

-> Warte X Sekunden
-> Führe nun die Klasse xyz aus
-> Warte X Sekunden
...

Und um es noch ein bißchen komplizierter zu machen:

Wie kann ich nebenbei die verbleibende Zeit bis zum nächsten Start anzeigen lassen???
 
Code:
package thread;
/*
* SwingTimerDemo.java
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SwingTimerDemo extends JFrame {
    private Timer timer1, timer2;
    private MyPanel panel;
    private int count, countDown, countTimes;
    private JButton btCancel, btStart;
    public SwingTimerDemo() {
        super("SwingTimerDemo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(250,150);
        setLocationRelativeTo(null);
        panel = new MyPanel();
        add(panel);
        count = 9;
        countDown = count;
        timer1 = new Timer(1000, new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                panel.getLabel1().setText("Countdown: " + (countDown--) + " seconds ");
            }
        });
        timer1.setInitialDelay(0);
        timer2 = new Timer(count*1000, new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                countDown = count;
                panel.getLabel2().setText(" Count: " + (++countTimes) + " times");
                timer1.restart();
            }
        });
        timer1.start();
        timer2.start();
        btCancel = new JButton("Cancel");
        btCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                timer1.stop();
                timer2.stop();
            }
        });
        add(btCancel, BorderLayout.NORTH);
        btStart = new JButton("Start");
        btStart.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                countDown = count;
                timer1.start();
                timer2.start();
            }
        });
        add(btStart, BorderLayout.SOUTH);
    }
    public static void main(final String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new SwingTimerDemo().setVisible(true);
            }
        });
    }
}
class MyPanel extends JPanel{
    private JLabel label1, label2;
    public MyPanel(){
        super(new BorderLayout());
        label1 = new JLabel();
        label2 = new JLabel();
        label2.setForeground(Color.RED);
        add(label1, BorderLayout.NORTH);
        add(label2, BorderLayout.SOUTH);
    }
    public JLabel getLabel1() {return label1;}
    public JLabel getLabel2() {return label2;}
}
 
Danke für die schnelle Antwort!

Aber eine Frage habe ich noch. Wie breche ich den Timer vorzeitig ab? Ich sehe hier keine Funktion, die das bewirkt... Oder irre ich mich?
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben