Hi Leute,
ich bin gerade dabei ein kleines Spiel zu schreiben. Bisher habe ich 2 Klassen:
"Mastermind.java" und "Stoppuhr.java".
die Stoppuhr soll einfach die Zeit hochzählen im Format: m:s "00:00"
die Stoppuhrklasse sieht so aus:
Code
- public class Stoppuhr{
- private int m=0;
- private int s=0;
- private boolean stop;
- private boolean isRunning = false;
- private int zaehler;
- private long save = System.currentTimeMillis();
- private Zähler z = new Zähler();
- private boolean pause = false;
- public String getZeit(){
- if(m<10&&s<10)return("0"+m+":0"+s);
- else if(m<10&&s>10)return("0"+m+":"+s);
- else if(m>10&&s<10)return(""+m+":0"+s);
- else return(""+m+":"+s);
- }
- public void weiter(){
- stop = false;
- }
- public void stoppe(){
- stop = true;
- }
- public void pauseZähler(){
- pause = true;
- }
- public void resumeZähler(){
- pause = false;
- }
- public void starte(){
- z = new Zähler();
- z.start();
- }
- public boolean getPause(){
- return pause;
- }
- public boolean getStop(){
- return stop;
- }
- class Zähler extends Thread{
- public void run(){
- if(!isRunning){
- isRunning=true;
- stop = false;
- zeitSetzen();
- isRunning=false;
- }
- }
- public void zeitSetzen(){
- while(!stop){
- long tmp = System.currentTimeMillis();
- if(!pause){
- zaehler = (int)(tmp-save);
- m = zaehler/60000;
- s = (zaehler-(m*60000))/1000;
- }else{
- long tmp2 = save;
- save += tmp-tmp2;
- }
- }
- }
- }
- }
und die Zeit soll mit in einer Swing-Oberfläche angezeigt werden:
Java
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import saufg24.Stoppuhr;
- public class MasterMind extends JFrame{
- //.... verschieden Swing-Komponenten
- private JLabel zeit = new JLabel("00:00");
- private JMenuBar menuBar = new JMenuBar();
- private JLabel zeit = new JLabel("00:00");
- public static void main(String[] args){
- MasterMind gui = new MasterMind();
- gui.setVisible(true);
- gui.setLocationRelativeTo(null);
- gui.setDefaultCloseOperation(EXIT_ON_CLOSE);
- }
- public MasterMind(){
- super("MasterMind");
- zThread.start();
- setJMenuBar(menuBar);
- JMenu fileMenu = new JMenu("File");
- JMenuItem newGameItem = new JMenuItem("Neues Spiel");
- JMenuItem pauseGameItem = new JMenuItem("Pause");
- fileMenu.add(newGameItem);
- fileMenu.add(pauseGameItem);
- //Menu Items ActionListener
- newGameItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- s = new Stoppuhr();
- s.starte();
- }});
- pauseGameItem.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if(s.getPause()){
- s.pauseZähler();
- }
- else if(!s.getPause()){
- s.resumeZähler();
- }
- }});
- //... anderer Code zur Zusamensetzung der Swing-Komponenten
- }
- class Zeit extends Thread{
- public void run(){
- while(true){
- zeit.setText(s.getZeit());
- }
- }
- }
- }
Ich kann die Zeit zwar mit dem "newGameItem" starten aber das mit pause und resume funktioniert leider nicht.
Kann mir vielleicht jemand weiterhelfen und/oder Verbesserungsvorschläge machen?
Danke schon mal im Vorraus,
Mfg,
Chiller
Edit by Awesome:
Habe den code-Tag mal verbessert & Spoiler für die Übersicht hinzugefügt.