Stopuhr

H

habkeinen

Gast
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Stoppuhr extends JFrame {
	
	private static final long serialVersionUID = 3419132691652660524L;
	private JTextField anzeige = new JTextField();
	private JButton start1 = new JButton("Start");
	private JButton stop1 = new JButton("Stop");
	private boolean aufhoeren = false;
	private long ms =0;
	private long sek=0;
	private long min =0;

	public Stoppuhr(){

                //GUI

		super("Stoppuhr");
		setSize(100,100);
		anzeige.setEditable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		setLayout(new GridLayout(3,1));
		add(anzeige);
		add(start1);
		add(stop1);
		
		start1.addActionListener(new Start());
		stop1.addActionListener(new Stop());
			
	}
	
	//Actionlistener ob thread hier an der stelle stimmt weiß ich  nicht

	private class Start extends Thread implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
			
			Thread t1 = new Thread(this);
			t1.start();
			t1.run();
			
		
		}
	}
	
	private class Stop implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
		
			aufhoeren =true;	
		}
	}
	
		
		 // hier soll die zeit umgerechnet werden.

		public void run(){
			
			long a = System.currentTimeMillis();
			
			while(aufhoeren=false){
				
				long c=	System.currentTimeMillis()-a;
				
				ms  = c%1000;
				sek = (c/1000)%60;
				if(sek == 60){
                                    min++;
			        }

				anzeige.setText(min +":"+ sek+":"+ ms);
			}		
		}
		
	
		public  void beenden(){
			
			while(aufhoeren = true){
				
				
				//aufhoeren =true;
			}		
		}
		

	
	public static void main(String[]args){
		Stoppuhr stoppuhr =new Stoppuhr();
		stoppuhr.setVisible(true);
	}
}

das programm soll eine stoppuhr sein.
aber ich weiß nicht wie wie den thread starten kann wenn ich auf den button start drücke.
wo da bei mir der fehler ist.
kann mir da jemand helfen?
 

xehpuk

Top Contributor
Probiers mal mit [c]while(aufhoeren == false)[/c] bzw. [c]while(!aufhoeren)[/c] und [c]while(aufhoeren == true)[/c] bzw. [c]while(aufhoeren)[/c].
 
S

SlaterB

Gast
gar nicht so schlecht bisher

- wenn die Klasse Start der Thread ist, dann dort auch die run-Methode,
ansonsten muss Start kein Thread sein, Stoppuhr kann kein Thread sein bzw. wäre dann kein JFrame, kann aber Runnable sein, das geht auch, dann in Start StoppUhr.this übergeben

- nur start(), nicht run() aufrufen

- while-Bedingung in run noch falsch, = vs ==

- in der Schleife besser
[c]try{ Thread.sleep(30); } catch (Exception e) {}[/c]
33x Update pro Sekunde reicht, müssen nicht Millionen Updates sein
 
H

habkeinen

Gast
Vielen dank euch,
habt mir sehr geholfen.
muss jetzt nur noch finden wie ich die minuten hoichzählen kann. das sprint bei 60 sekunden net auf 1...
 

w0ddes

Bekanntes Mitglied
Bitte kopier doch deinen Quelltext, wie er bis jetzt ist nochmal hier rein, damit Leute, die das gleiche Problem haben auch eine Lösung finden ;)

Dann kann dir vllt auch bei deinem letzten Problem geholfen werden.
 
H

habkeinen

Gast
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Stoppuhr extends JFrame {
	
	private static final long serialVersionUID = 3419132691652660524L;
	private JTextField anzeige = new JTextField();
	private JButton start1 = new JButton("Start");
	private JButton stop1 = new JButton("Stop");
	private JButton reset = new JButton("Reset");
	private boolean aufhoeren = false;
	private long ms =0;
	private long sek=0;
	private long min =0;

	//GUI
	public Stoppuhr(){
		
		super("Stoppuhr");
		setSize(100,200);
		anzeige.setEditable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		setLayout(new GridLayout(4,1));
		add(anzeige);
		add(start1);
		add(stop1);
		add(reset);
		
		start1.addActionListener(new Start());
		stop1.addActionListener(new Stop());
		reset.addActionListener(new Reset());
		
			
	}
	
	//ActionListener,Thread
	
	private class Start  implements ActionListener , Runnable{
		
		public void actionPerformed(ActionEvent e){
			
			Thread t1 = new Thread(this);
			t1.start();
		}
		
		public void run(){
			
			long a = System.currentTimeMillis();
			
			while(aufhoeren == false){
				
				long c=	System.currentTimeMillis()-a;
				
				ms  = c%1000;
				sek = (c/1000)%60;
				
				if(sek > 59){                        //bei der anzeige zählt er ms und sek hoch. nur wenn ich bei 59                 
                                                                           sekunden angekommen bin springt die min net auf 1... und sek fängt      
                                                                           wieder von vorne an
					min++;
				}
					
				anzeige.setText(min +":"+ sek+":"+ ms);
			}		
		}
	}
	
	private class Stop implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
		
			aufhoeren =true;	
		}
	}
	
	
	
	private class Reset implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
		
			aufhoeren =false;
			anzeige.setText("");
		}
	}
		
	public static void main(String[]args){
		Stoppuhr stoppuhr =new Stoppuhr();
		stoppuhr.setVisible(true);
	}
}
 

xehpuk

Top Contributor
Das Problem ist, dass ja die Bedingung nie erfüllt wird. Probiers mal hiermit:
[java=56]min = c/(1000*60)%60;
sek = c/(1000)%60;
ms = c%1000;[/code]
 
H

habkeinen

Gast
Java:
package miniprojekt_7_stoppuhr;

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

public class Stoppuhr extends JFrame {
	
	private static final long serialVersionUID = 3419132691652660524L;
	private JTextField anzeige = new JTextField();
	private JButton start1 = new JButton("Start");
	private JButton stop1 = new JButton("Stop");
	private JButton reset = new JButton("Reset");
	private boolean aufhoeren = false;
	private long ms =0;
	private long sek=0;
	private long min =0;

	//GUI
	public Stoppuhr(){
		
		super("Stoppuhr");
		setSize(100,200);
		anzeige.setEditable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		setLayout(new GridLayout(4,1));
		add(anzeige);
		add(start1);
		add(stop1);
		add(reset);
		
		start1.addActionListener(new Start());
		stop1.addActionListener(new Stop());
		reset.addActionListener(new Reset());
		
			
	}
	
	//ActionListener,Thread
	
	private class Start  implements ActionListener , Runnable{
		
		public void actionPerformed(ActionEvent e){
			
			Thread t1 = new Thread(this);
			t1.start();
		}
		
		public void run(){
			
			long a = System.currentTimeMillis();
			
			while(aufhoeren == false){
				
				long c=	System.currentTimeMillis()-a;
				
				ms  = c%1000;
				sek = (c/1000)%60;
				min = c/60000;
		
				anzeige.setText(min +":"+ sek+":"+ ms);
			}		
		}
	}
	
	private class Stop implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
		
			aufhoeren =true;	
		}
	}
	
	
	
	private class Reset implements ActionListener{
		
		public void actionPerformed(ActionEvent e){
		
			aufhoeren =false;
			anzeige.setText("");
		}
	}
		
	public static void main(String[]args){
		Stoppuhr stoppuhr =new Stoppuhr();
		stoppuhr.setVisible(true);
	}
}

läuft einwandfrei
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben