Stoppuhr

Status
Nicht offen für weitere Antworten.

bratwurst

Mitglied
Hallöle,

gleich vorweg, ich bin noch relativer Anfänger, brauche aber Hilfe bei einer Projektarbeit, da unser Lehrer uns trotz mangelnder Kenntnisse unsererseits ins kalte Wasser geworfen hat.

Für diese Projektarbeit benötige ich eine Stoppuhr, die bei einem Klick auf Start zu zählen beginnt, und bei einem Klick auf Stop aufhört zu zählen. Dieser Wert soll dann in der Form "Sekunden" oder hh:mm:ss vorliegen. Nur leider bekomme ich das mit dem Stoppen nicht wirklich hin.

Hat jemand ne Idee eines Ansatzpunktes oder vielleicht mal irgendwo nen fertigen Codeschnippel?
Ich habe dank google zwar schon einiges gefunden, jedoch hatte ich massive Schwierigkeiten bei der Implementierung des Codes.


Wäre schön, wenn mir da jemand helfen könnte.


Vielen Dank im Vorraus,
bratwurst
 

thE_29

Top Contributor
du brauchst java.util.Timer und java.util.TimerTask!

Nen Button der deinen Timer einschaltet, der alle sekunden, millsekunden, etc (was du willst) abläuft und die Zeit raufzählt!

Drückst du nochmal auf den button und der timer ist aktiv, so stoppe ihn und gib aus!

Such hier im Forum nach timer und timertask und du wirst sicher ein Bsp zu den 2 dingern finden!
 

bratwurst

Mitglied
Wer suchet der findet :wink:

Dank deiner Hinweise habe ich nun folgenden Schnippel:

Code:
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*;
import java.util.Timer; 
import java.util.TimerTask;

public class click extends Frame
{ 
	

   int iZeit=-1; 

   Button btStart = new Button("Starten"); 
 
   Button btStop = new Button("Stoppen"); 

   private JLabel lbZeit = new JLabel("Nix ist passiert"); 

   private Timer zeit = new Timer(true); 
   private TimerTask zaehler = new TimerTask(){ 
      public void run(){ 
         iZeit = iZeit + 1; 
         lbZeit.setText(String.valueOf(iZeit));}}; 

   private ActionListener al; 

   public void init(){ 
      this.setSize(600,600); 
      this.setBackground(Color.LIGHT_GRAY); 
      this.setLayout(null); 

      setKomps(); 

      implementActionListener();} 

   private void setKomps(){ 
      btStart.setBounds(10,20,100,20); 
      this.add(btStart); 
      btStop.setBounds(10,20,100,20); 
      this.add(btStop); 
      btStop.setVisible(false); 
      lbZeit.setBounds(200,20,200,20); 
      this.add(lbZeit); 
      lbZeit.setFont(new Font("Arial", Font.BOLD, 20)); 
      lbZeit.setHorizontalAlignment(SwingConstants.CENTER); 
      lbZeit.setVerticalAlignment(SwingConstants.CENTER);} 

   private void runningKomps(){ 
      btStart.setVisible(false); 
      btStop.setVisible(true);} 

   private void stoppedKomps(){ 
      btStop.setVisible(false); 
      btStart.setVisible(true);} 

   private void implementActionListener(){ 
      al = new ActionListener(){ 
         public void actionPerformed(ActionEvent e){ 
            if (btStart == e.getSource()){ 
               runningKomps(); 
               zeit.schedule(zaehler, 0, 1000);} 
            else if (btStop == e.getSource()){ 
               stoppedKomps(); 
               zeit.cancel(); 
               iZeit = -1;}}}; 
      btStart.addActionListener(al); 
      btStop.addActionListener(al);} 
    
}

Nur leider erhalte ich dann die Fehlermeldung

Exception in thread "main" java.lang.NoSuchMethodError: main


Damit kann ich nun leider nichts anfangen :cry:
 

Wildcard

Top Contributor
Wenn darin keine main-Methode ist kannst du es auch nicht ausführen!
Entweder von einer anderern Klasse instanzieren, oder eine main schreiben...
 

bratwurst

Mitglied
Und wenn du jetzt noch einen Tip für mich hättest, wie ich das mache, heirate ich dich :wink:

Ne Scherz...aber dafür, dass wir das im Unterricht gerade mal 45 Minuten besprochen haben, reichen meine Kenntnisse leider bei Weitem nicht aus.
 

Wildcard

Top Contributor
Füg der Klasse eine main an:
Code:
public static void main(Sting[] args)
{
    //Keine Ahnung wo du das her hast, aber Klassen werden groß geschrieben
    click c = new click();
    c.init();
    c.setVisible(true);
}
 

vaDer.bln

Mitglied
Find ich ja ziemlich hart das ihr nach 45min nicht mal main methode etc besprochen habt und dann ein Projekt macht bei der ihr Swing AWT und Timer braucht.
oder du hast net aufgepasst ;)
 

vaDer.bln

Mitglied
Ach so zur info. Die Darstellung ist etwas falsch geraten glaub ich und es ist auch keine hh.mm.ss angegeben aber das sollte dir bestimmt erstmal einen kleinen überblick verschaffen. Falls du weitere fragen hast kannst sie ja posten
 

The_God

Aktives Mitglied
geht auch über einen Thread, soll der Timer das eigentlich Programm nicht zuviel belasten, stell einfach die Priorität entsprechend ein.

Den Thread kannst ja mit sleep oder wait (weiss nicht mehr genau ...) anhalten. so dass er z.b. jede sekunde ein Label aktualisiert.


z.B.:

Code:
package start;

import java.lang.Runnable;
import javax.swing.JFrame;

public class Untitled2 implements Runnable {
  static GregorianCalendar ca = new GregorianCalender();

  public void run() {
    ca = new GregorianCalendar();
    /...da kannst halt dann das rausfiltern was du ausgibst.../  

 }
}
 

thE_29

Top Contributor
http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html

..If you need to update a component after a delay (whether or not your code is currently executing in an event listener), use a timer to do so.

If you need to update a component at a regular interval, use a timer.

Überall wo kein Thread gebraucht wird, wegen Geschwindigkeit oder sonstiges, sollte man Timer nehmen (irgendwo stand das mal bei einem Artikel von Sun ..)
Da die Thread´s und Swing net gut zusammenspielen, bzw Swing net Thread safe ist (swing GUI kann blockiert, oder ähnliches werden)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben