Einfacher Timer geht nicht

reidhaar

Mitglied
Hey leute,

ich hab irgendwie einen riesen-knüppel bei einer java-aufgabe und könnt einen schubser gebrauchen. sehr wahrscheinlich schnall ich etwas sehr grundlegendes nicht, also folgendes: die aufgabe ist (zum thema interfaces und event listeners), ein programm zu schreiben, das alle sekunde das datum mit zeit druckt. ich habe folgendes gemacht:

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.Timer;


public class TimerTester {
	public static void main(String[] args){
		
		 class TimeListener implements ActionListener{
			public void actionPerformed(ActionEvent event){
				System.out.println("test in");
				Date now = new Date();
				System.out.println(now);
			}

		}
		 
		
		ActionListener listener = new TimeListener();
		
		int DELAY = 1000;
		new Timer(DELAY, listener).start();
	
	}

}

da passiert gar nix! ich hab dann ein wenig nachgeschaut im buch und mal probehalber den listener an einen button gehängt. dann hats wunderbar funktioniert. und jetzt das komische: wenn ich zwei listeners mache, nur einen an einen butten hänge und den anderen an den timer, dann läufts!

ich schnall das nicht und wäre froh um hilfe

lg

reidhaar
 
Zuletzt bearbeitet von einem Moderator:
Vielleicht wäre es gut wenn du den restlichen Code mit [c]
Java:
 ,
[/c] Tags, zeigen könntest?

Was muss der Button können?
 
code ist so:

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;


public class TimerTester {
	public static void main(String[] args){
		JFrame frame = new JFrame();
		JButton button = new JButton("click me");
		frame.add(button);
		frame.setSize(300, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
		System.out.println("test out");
		
		 class TimeListener implements ActionListener{
			public void actionPerformed(ActionEvent event){
				System.out.println("test in");
				Date now = new Date();
				System.out.println(now);
			}

		}
		 
		 class TimeListener1 implements ActionListener{
				public void actionPerformed(ActionEvent event){
					System.out.println("zweiter listener");
				}

			}
		ActionListener listener = new TimeListener();
		
		
		ActionListener listener1 = new TimeListener1();
		button.addActionListener(listener1);
		
		
		int DELAY = 1000;
		new Timer(DELAY, listener).start();
		
		 
		
		
		
	}

}
 
Zuletzt bearbeitet von einem Moderator:
ich hab den button nur angehängt, um den listener anzuhängen, um zu schauen, ob wenigstens der funzt.

tut er auch.

komischerweise feuert der timer alleine den listener nicht, nur wenn vorher der button kommt. hab irgendwo gelesen, dass javax.swing.timer nur bei GUI dingen geht. hats ev was damit zu tun?

lg
 
Es muss ja irgendwo ein Objekt erzeugt werden, also eine Instanz von [c]TimeListener[/c].

Java:
ActionListener listener = new TimeListener();

//kann man auch mit
TimeListener listener = new TimeListener();
//erzeugen.

Den Button kannst du ja weglassen, funktioniert auch ohne.
Wobei du könntest vielleicht auch [c]JLabel[/c] benutzen, dann wird die die Sekundenanzeige auf der Grafik angezeigt.
 
ja, aber das wurde ja schon im obigen beispiel gemacht, und da hats nicht funktioniert. nur wenn irgend ein button gemacht wird, gehts plötzlich. muss den listener nicht einmal anhängen, geht gleichwohl.

aber wenn ich den listener nur an den timer hänge, gehts nicht.
 
Der Timer funktioniert auch ohne den Button. Ohne den JFrame beendet sich allerdings das Programm. Kein laufendes Programm, kein laufender Timer. Wenn im Code des ersten Postings
Java:
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
angehängt wird, läuft der Timer 10 Sekunden.
 

Neue Themen


Zurück
Oben