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:
und die Zeit soll mit in einer Swing-Oberfläche angezeigt werden:
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,
Helikoptermann
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:
Java:
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,
Helikoptermann
Zuletzt bearbeitet: