T
Tilo
Gast
Hallo!
Ich habe folgende Aufgabe:
Vor paar Tagen habe ich ein Programm mit der gleichen Funktionalität geschrieben, aber das war eine reine SWING-Anwendug. Mit Start-Taste hab ich aktuelle Zeit (currentTimeMillis()) geholt, dann noch Mal mit der Stop-Taste und schließlich einfach Differenz berechnet. Aber hier soll das irgendwie anders gehen, sonst hat das keien Sinn diese Aufgabe mittels Threads zu implementieren :bahnhof:
Der aktuelle Standpunkt
Kann mir jemand so grob erklären, wie das weiter geht?
Ich habe folgende Aufgabe:
• Wird die Taste ”start” gedrückt, wartet das Programm eine zufällige Zeitspanne zwischen
5 und 15 Sekunden.
• Nach der Wartezeit wird im Statusbereich die Meldung ”Now drücken” angezeigt und
die Zeitmessung gestartet.
• Das Drücken von ”jetzt” stoppt die Zeitmessung, falls diese gestartet wurde und die
benötigte Reaktionszeit wird in Millisekunden ausgegeben.
• Ist die Zeitmessung nicht gestartet worden oder die Zeitmessung überschreitet 10 Sekunden,
wird ’im Statusbereich ”Messung fehlgeschlagen” ausgegeben.
• Das drücken von ”start” initialisiert zu jedem Zeitpunkt den Messvorgang und die
Statusanzeige erneut.
Vor paar Tagen habe ich ein Programm mit der gleichen Funktionalität geschrieben, aber das war eine reine SWING-Anwendug. Mit Start-Taste hab ich aktuelle Zeit (currentTimeMillis()) geholt, dann noch Mal mit der Stop-Taste und schließlich einfach Differenz berechnet. Aber hier soll das irgendwie anders gehen, sonst hat das keien Sinn diese Aufgabe mittels Threads zu implementieren :bahnhof:
Der aktuelle Standpunkt
Code:
class ReaktionMesser
{
public static void main(String args[])
{new MyFrame("ReaktionMesser");}
}
class MyFrame extends JFrame implements ActionListener
{
private int frwidth = 600;
private int frhight = 200;
private JPanel statusBereich = new JPanel(new GridLayout(1,1));
private JPanel buttonPanel = new JPanel(new GridLayout(1,2));
private JButton start = new JButton("Start");
private JButton now = new JButton("Now!");
private JLabel label = new JLabel("Statusbereich");
Thread thread;
MyFrame(String s)
{
super(s);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((d.width-frwidth)/2,(d.height-frhight)/2);
setSize(frwidth,frhight);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(statusBereich, BorderLayout.CENTER);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
statusBereich.add(label);
label.setHorizontalAlignment(JLabel.CENTER);
label.setFont(new Font("Serif", Font.BOLD, 50));
buttonPanel.add(start);start.addActionListener(this);start.setActionCommand("start");
buttonPanel.add(now);now.addActionListener(this);now.setActionCommand("now");
now.setEnabled(false);
setVisible(true);
}
public void messungAktivieren()
{
label.setText("Now drücken!");
now.setEnabled(true);
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("start"))
{
//System.out.println("Start wurde gedrückt");
thread = new ZeitMesser(this);
thread.start();
label.setText("Bist du bereit?");
}
if(e.getActionCommand().equals("now"))
{
//System.out.println("Now wurde gedrückt");
}
}
}
class ZeitMesser extends Thread
{
MyFrame jf;
ZeitMesser (MyFrame jf) {this.jf = jf;}
private int warteZeit;
public void run ()
{
//System.out.println("Thread wartet");
warteZeit = (int)Math.round(Math.random()*10000)+5000;
try {Thread.sleep(warteZeit);}
catch (InterruptedException ex) {}
//System.out.println("Thread hat "+warteZeit+" Millisekunden gewartet");
jf.messungAktivieren();
}
}
Kann mir jemand so grob erklären, wie das weiter geht?