Hallo,
ich habe ein Programm geschrieben, in dem ich den java SwingTimer verwende. Der Timer ist in eine GUI eingebettet, auf der Aktionen ausgeführt (z.B. Textfeld belegen) werden während der Timer herunterläuft. Des öfteren passiert es, dass der Timer einfach zum Stillstand kommt und dadurch die GUI einfach "einfriert", sprich man kann keine Aktionen mehr ausführen. Ich dachte eigentlich, dass der Timer relativ stabil läuft, da er ja in einem Thread läuft. Kann es sein, dass es da zu Komplikationen kommen kann zwischen dem Herunterticken des Timers und den Aktionen auf der GUI?
Gruß
Dominik
ich habe ein Programm geschrieben, in dem ich den java SwingTimer verwende. Der Timer ist in eine GUI eingebettet, auf der Aktionen ausgeführt (z.B. Textfeld belegen) werden während der Timer herunterläuft. Des öfteren passiert es, dass der Timer einfach zum Stillstand kommt und dadurch die GUI einfach "einfriert", sprich man kann keine Aktionen mehr ausführen. Ich dachte eigentlich, dass der Timer relativ stabil läuft, da er ja in einem Thread läuft. Kann es sein, dass es da zu Komplikationen kommen kann zwischen dem Herunterticken des Timers und den Aktionen auf der GUI?
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;}
}
Gruß
Dominik