zweiter Timer überschreibt den ersten Timer ?

Status
Nicht offen für weitere Antworten.

Thomas Lorenz

Bekanntes Mitglied
Hallo Gemeinde,
ich habe eine Timer, der für ein paar Sekunden eine Fehlermeldung anzeigt.
Tritt nun innerhalb dieser Zeit ein neuer Fehler auf, so zählt er nicht wieder von vorne,
sondern verwendet die ersten vier Sekunden, was unter Umständen dazu führt, dass der 2.Fehler
nur eine Nanosekunde angezeigt wird.

Wie löst man diese Aufgabe?

Java:
 if (_Sys.getTimerInfo() > 0 && errorClassification != 0){
		
		final Timer timer = new Timer();
		TimerTask task = new TimerTask() {
		public void run() {
		    SimpleDateFormat fmt = new SimpleDateFormat();
		    fmt.applyPattern( " HH:mm:ss" );
		    Calendar cal = Calendar.getInstance();
		    lb_Hinweis.setBackground(_Sys.getBackground());
		    lb_Hinweis.setForeground(Color.black);
		    lb_Hinweis.setText("<html>"+ "Anzeigedauer der Meldungen unter :   --> Einstellungen --> Eigene Einstellungen ändern. " + "<br>" + "" + "<br>" +
			    "" + "<br> " + "" + " " + "" + "<br>" + "<B>" + "letzte Meldung wurde automatisch nach " + (_Sys.getTimerInfo()/1000) + " Sekunden um : " +  fmt.format(cal.getTime()) + "  Uhr gelöscht.</B/html>");		   
		}
		};
		//start des Timers:
		timer.schedule(task, _Sys.getTimerInfo()); // einmalige Ausführung
		
	    }
 

André Uhres

Top Contributor
ich habe eine Timer, der für ein paar Sekunden eine Fehlermeldung anzeigt.
Meinst du sowas?
Java:
/*
 * MessageDemo.java
 */

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;

public class MessageDemo extends JFrame {

    private JLabel statusMessageLabel = new JLabel();
    private JPanel statusPanel = new JPanel();
    private final Timer messageTimer;
    private MessageDemo frame;
    private JButton btStart = new JButton("try");
    private int errorCount;

    public MessageDemo() {
        super("MessageDemo");
        frame = this;
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(600, 400);
        setLocationRelativeTo(null);
        JSeparator statusPanelSeparator = new JSeparator();
        statusPanel.setLayout(new BorderLayout());
        statusPanel.setPreferredSize(new Dimension(0, 16));
        JPanel progressPanel = new JPanel();
        statusPanel.add(statusPanelSeparator, BorderLayout.NORTH);
        statusPanel.add(statusMessageLabel, BorderLayout.CENTER);
        statusPanel.add(progressPanel, BorderLayout.EAST);
        // status bar initialization - message timeout
        int messageTimeout = 5000;
        messageTimer = new Timer(messageTimeout, new ActionListener() {

            public void actionPerformed(final ActionEvent e) {
                statusMessageLabel.setText("");
            }
        });
        messageTimer.setRepeats(false);
        // connecting action tasks to status bar
        addPropertyChangeListener(new PropertyChangeListener() {

            public void propertyChange(final PropertyChangeEvent evt) {
                String propertyName = evt.getPropertyName();
                if ("message".equals(propertyName)) {
                    String text = (String) (evt.getNewValue());
                    statusMessageLabel.setText((text == null) ? "" : text);
                    messageTimer.restart();
                }
            }
        });
        add(statusPanel, BorderLayout.SOUTH);
        add(btStart, BorderLayout.NORTH);
        btStart.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {
                //some code for testing only:
                errorCount++;
                frame.firePropertyChange("message", null, " Error " + errorCount);
            }
        });
    }

    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                new MessageDemo().setVisible(true);
            }
        });
    }
}
 

Thomas Lorenz

Bekanntes Mitglied
Hallo Andre,

zunächst einmal Danke für Dein Beispiel.

Es läuft genauso, wie ich es mir vorgestellt habe !!

Aber ich krieg es nicht hin Dein Beispiel in meine Methode einzubauen.

Solltest Du ein wenig Zeit haben, könntest Du mir ein paar Tips hierfür geben.

Hier kommt nun meine Methode.

Wenn ein Fehler auftritt (ob Button, oder Textfeld ...) wird diese Methode aufgerufen.
Java:
public void setInfoText(int errorClassification, String error1, String error2, String error3, String error4, String extraText){
	    SimpleDateFormat fmt = new SimpleDateFormat();
	    fmt.applyPattern( " HH:mm:ss" );

	    Calendar cal = Calendar.getInstance();
	 // Hier beginnen die unterschiedlichen Formen der Fehlerdarstellung, anhand ihrer 'errorClassification'
	    if (errorClassification == 4){
		
		// Label wird formatiert
		lb_InfoWindow.setBackground(new Color (152, 251, 152));
		lb_InfoWindow.setForeground(Color.black);
		lb_InfoWindow.setText("<html>"+ error1 + "<br>" + error2 + "<br>" +
			    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" + "letzte Meldung um : " +  fmt.format(cal.getTime()) + "  Uhr </B/html>");		   
		}
	    if (errorClassification == 3){
		lb_InfoWindow.setForeground(Color.black);
		lb_InfoWindow.setBackground(new Color (255, 255, 0));
		lb_InfoWindow.setText("<html>"+ error1 + "<br>" + error2 + "<br>" +
			    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" + "letzte Meldung um : " +  fmt.format(cal.getTime()) + "  Uhr </B/html>");		   
		}
	    if (errorClassification == 2){
		lb_InfoWindow.setForeground(Color.white);
		lb_InfoWindow.setBackground(new Color (255, 48, 48));
		lb_InfoWindow.setText("<html>"+ error1 + "<br>" + error2 + "<br>" +
			    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" + "letzte Meldung um : " +  fmt.format(cal.getTime()) + "  Uhr </B/html>");		   
		}
	    // Das passiert, wenn der Anwender per Doppelklick in das Label klickt.
	    if (errorClassification == 0){  // Textfeld wird auf NULL gesetzt (Standardwert)
		lb_InfoWindow.setText("<html>"+ error1 + "<br>" + error2 + "<br>" +
			    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" + "letzte Meldung wurde durch den Anwender um : " +  fmt.format(cal.getTime()) + "  Uhr gelöscht.</B/html>");		   
		}
	    // .. und nun wird nach der eingestellten Zeit (_Sys.getTimerInfo()) die letzte Meldung mit einer Standardanzeige überschrieben
	    if (_Sys.getTimerInfo() > 0 && errorClassification != 0){
		
		final Timer timer = new Timer();
		TimerTask task = new TimerTask() {
		public void run() {
		    SimpleDateFormat fmt = new SimpleDateFormat();
		    fmt.applyPattern( " HH:mm:ss" );
		    Calendar cal = Calendar.getInstance();
		    lb_InfoWindow.setBackground(_Sys.getBackground());
		    lb_InfoWindow.setForeground(Color.black);
		    lb_InfoWindow.setText("<html>"+ "Um die Anzeigedauer der Meldungen zu ändern wählen Sie :   " + "<br>" + "--> Einstellungen --> Eigene Einstellungen" + "<br>" +
			    "oder die Tastenkombination Alt-U aus." + "<br> " + "" + " " + "" + "<br>" + "<B>" + "letzte Meldung wurde automatisch nach " + (_Sys.getTimerInfo()/1000) + " Sekunden um : " +  fmt.format(cal.getTime()) + "  Uhr gelöscht.</B/html>");		   
		}
		};
		//start des Timers:
		
		timer.schedule(task, _Sys.getTimerInfo()); // einmalige Ausführung
		System.out.println(task.scheduledExecutionTime());
		}
	    /* Es folgt das Speichern des aufgetretenen Fehlers. ,
	     * 
	     * Achtung: die Zusammensetzung erfolgt in umgekehrter Reihenfolge.
	     * Dadurch kann der zuletzt ausgelöste Fehler an 1. Stelle dargestellt werden.
	     */
	    _Error.addToErrorList("___________________________________________________" +"\n" );
	    _Error.addToErrorList("Uhrzeit : " + fmt.format(cal.getTime()));
	    _Error.addToErrorList(extraText +"\n");
	    _Error.addToErrorList(error4 + "\n" );
	    _Error.addToErrorList(error3 + "\n" );
	    _Error.addToErrorList(error2 + "\n" );
	    _Error.addToErrorList(error1 + "\n" );
	    }


Also dies ist meine Fassung, die nicht so läuft, weil eben der erste Timer zu Ende läuft, obwohl eine
neue Meldung wieder von vorne mit der Zeit beginnen soll.
 

André Uhres

Top Contributor
Wir können die Daten für die Meldungen in einer Klasse "Message" kapseln, etwa so:
Java:
/*
 * MessageDemo2.java
 */

import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.*;


public class MessageDemo2 extends JFrame {

    private JLabel lb_InfoWindow = new JLabel();
    private JPanel statusPanel = new JPanel();
    private final Timer messageTimer;
    private MessageDemo2 frame;
    private JButton btStart = new JButton("try");
    private int errorCount;

    public MessageDemo2() {
        super("MessageDemo2");
        frame = this;
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(600, 400);
        setLocationRelativeTo(null);
        JSeparator statusPanelSeparator = new JSeparator();
        statusPanel.setLayout(new BorderLayout());
        statusPanel.setPreferredSize(new Dimension(0, 90));
        JPanel progressPanel = new JPanel();
        statusPanel.add(statusPanelSeparator, BorderLayout.NORTH);
        lb_InfoWindow.setOpaque(true);
        statusPanel.add(lb_InfoWindow, BorderLayout.CENTER);
        statusPanel.add(progressPanel, BorderLayout.EAST);
        // status bar initialization - message timeout (_Sys.getTimerInfo())
        messageTimer = new Timer(_Sys.getTimerInfo(), new ActionListener() {

            public void actionPerformed(final ActionEvent e) {
                // .. und nun wird nach der eingestellten Zeit (_Sys.getTimerInfo())
                //die letzte Meldung mit einer Standardanzeige überschrieben
                SimpleDateFormat fmt = new SimpleDateFormat();
                fmt.applyPattern(" HH:mm:ss");
                Calendar cal = Calendar.getInstance();
                lb_InfoWindow.setBackground(_Sys.getBackground());
                lb_InfoWindow.setForeground(Color.black);
                lb_InfoWindow.setText("<html>" + "Um die Anzeigedauer der " +
                        "Meldungen zu ändern wählen Sie :   " + "<br>" +
                        "--> Einstellungen --> Eigene Einstellungen" + "<br>" +
                        "oder die Tastenkombination Alt-U aus." + "<br> " + "" +
                        " " + "" + "<br>" + "<B>" + "letzte Meldung wurde " +
                        "automatisch nach " + (_Sys.getTimerInfo() / 1000) +
                        " Sekunden um : " + fmt.format(cal.getTime()) +
                        "  Uhr gelöscht.</B/html>");
            }
        });
        messageTimer.setRepeats(false);
        // connecting action tasks to status bar
        addPropertyChangeListener(new PropertyChangeListener() {

            public void propertyChange(final PropertyChangeEvent evt) {
                String propertyName = evt.getPropertyName();
                if ("message".equals(propertyName)) {
                    Message msg = (Message) (evt.getNewValue());
                    lb_InfoWindow.setText(msg.getText());
                    messageTimer.restart();
                }
            }
        });
        add(statusPanel, BorderLayout.SOUTH);
        add(btStart, BorderLayout.NORTH);
        btStart.addActionListener(new ActionListener() {

            public void actionPerformed(final ActionEvent e) {
                //some code for testing only:
                errorCount++;
                setInfoText(0, "Error 0" + errorCount, "Error2", "Error3", "Error4", "extraText");
            }
        });
    }

    public void setInfoText(int errorClassification, String error1, String error2,
            String error3, String error4, String extraText) {
        SimpleDateFormat fmt = new SimpleDateFormat();
        fmt.applyPattern(" HH:mm:ss");

        Calendar cal = Calendar.getInstance();
        // Hier beginnen die unterschiedlichen Formen der Fehlerdarstellung,
        //anhand ihrer 'errorClassification'
        Message msg = new Message();
        if (errorClassification == 4) {
            // Label wird formatiert
            msg.setBackground(new Color(152, 251, 152));
            msg.setForeground(Color.black);
            msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
                    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
                    "letzte Meldung um : " + fmt.format(cal.getTime()) + "  Uhr </B/html>");
        }
        if (errorClassification == 3) {
            msg.setForeground(Color.black);
            msg.setBackground(new Color(255, 255, 0));
            msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
                    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
                    "letzte Meldung um : " + fmt.format(cal.getTime()) + "  Uhr </B/html>");
        }
        if (errorClassification == 2) {
            msg.setForeground(Color.white);
            msg.setBackground(new Color(255, 48, 48));
            msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
                    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
                    "letzte Meldung um : " + fmt.format(cal.getTime()) + "  Uhr </B/html>");
        }
        // Das passiert, wenn der Anwender per Doppelklick in das Label klickt.
        if (errorClassification == 0) {  // Textfeld wird auf NULL gesetzt (Standardwert)
            msg.setText("<html>" + error1 + "<br>" + error2 + "<br>" +
                    error3 + "<br> " + error4 + " " + extraText + "<br>" + "<B>" +
                    "letzte Meldung wurde durch den Anwender um : " + fmt.format(cal.getTime()) +
                    "  Uhr gelöscht.</B/html>");
        }
        frame.firePropertyChange("message", null, msg);
        /* Es folgt das Speichern des aufgetretenen Fehlers. ,
         *
         * Achtung: die Zusammensetzung erfolgt in umgekehrter Reihenfolge.
         * Dadurch kann der zuletzt ausgelöste Fehler an 1. Stelle dargestellt werden.
         */
        _Error.addToErrorList("___________________________________________________" + "\n");
        _Error.addToErrorList("Uhrzeit : " + fmt.format(cal.getTime()));
        _Error.addToErrorList(extraText + "\n");
        _Error.addToErrorList(error4 + "\n");
        _Error.addToErrorList(error3 + "\n");
        _Error.addToErrorList(error2 + "\n");
        _Error.addToErrorList(error1 + "\n");
    }

    public static void main(final String args[]) {
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                new MessageDemo2().setVisible(true);
            }
        });
    }
}
class Message {

    private String text;
    private Color background,  foreground;

    String getText() {
        return text == null ? "" : text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Color getBackground() {
        return background == null ? Color.WHITE : background;
    }

    public void setBackground(Color background) {
        this.background = background;
    }

    public Color getForeground() {
        return foreground == null ? Color.BLACK : foreground;
    }

    public void setForeground(Color foreground) {
        this.foreground = foreground;
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
C Instanz einer Klasse während if-Abfrage erzeugen und bei zweiter if-Abfrage wiederverwenden Java Basics - Anfänger-Themen 6
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J Daten aus zweiter Klasse importieren Java Basics - Anfänger-Themen 33
D Zweiter Konstruktor der Unterklasse wird nicht angenommen Java Basics - Anfänger-Themen 10
T zweiter thread killt den ersten Java Basics - Anfänger-Themen 2
A Liste als zweiter ActionListener Java Basics - Anfänger-Themen 5
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
R Timer Format: 00:00:00 Java Basics - Anfänger-Themen 29
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
E Timer erstellen Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
K Ampelsteuerung mit Timer Java Basics - Anfänger-Themen 8
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
T Timer - HILFE Java Basics - Anfänger-Themen 10
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Swing Timer Java Basics - Anfänger-Themen 3
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
B Timer Java Basics - Anfänger-Themen 25
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
S Erste Schritte Java Timer Java Basics - Anfänger-Themen 13
E Threads Timer Java Basics - Anfänger-Themen 6
Spin KI Anfänger Frage : Timer Problem Java Basics - Anfänger-Themen 6
F Prüfen ob timer läuft Java Basics - Anfänger-Themen 6
L Erste Schritte Timer und Zugriffsattribute Java Basics - Anfänger-Themen 5
M Audio + Timer Java Basics - Anfänger-Themen 12
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
R Klassen MemorySpiel: brauche Timer Java Basics - Anfänger-Themen 3
D Timer in Applet Java Basics - Anfänger-Themen 2
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
F Java Timer Frage Java Basics - Anfänger-Themen 14
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
B Timer Java Basics - Anfänger-Themen 2
S timer task problem Java Basics - Anfänger-Themen 2
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
W Timer erstellen Java Basics - Anfänger-Themen 2
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M Timer unterbrechen? Wo ist mein Thread? Java Basics - Anfänger-Themen 2
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
P Java Timer Java Basics - Anfänger-Themen 2
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
B problem mit timer/timertask, Farbverlauf Java Basics - Anfänger-Themen 10
Piwi Timer bei Programmende beenden Java Basics - Anfänger-Themen 25
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C Regelmäßigen Timer bei Zeitüberschreitung nacheinander abarbeiten Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben