17. december 2000 - 00:46
Der er
2 kommentarer
Timer med 2 tråde
Jeg kan ikke finde ud af at lave en timer med 2 tråde. Den første skal tælle ned fra 5 min og derefter start et spil, hvor der her tælles ned fra 20 sec for hvert spørgsmål. Håber der er nogle der kan hjælpe.
17. december 2000 - 13:15
#1
Hvis du bruger javax.swing.Timer, så er det ikke så svært
Følgende kode laver en klasse, hvor actionPerformed(ActionEvent e) bliver kaldt efter 5min og derefter hver 20. sekund
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Timertest extends Frame implements ActionListener
{
Timer t;
public Timertest()
{
super();
t = new Timer(300000, this);
t.start();
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e) {
if (t.getDelay() == 300000) { //første kald efter 5 min
//kald kode der starter spillet
setTitle(\"5.min gået\");
t.setDelay(20000);
}
else { //alle andre kalde med 20 sekunders mellemrum
setTitle(\"20.sec gået\");
}
}
public static void main(String args[])
{
System.out.println(\"Starting Timertest...\");
Timertest mainFrame = new Timertest();
mainFrame.setSize(400, 400);
mainFrame.setTitle(\"Timertest\");
mainFrame.setVisible(true);
}
}
17. december 2000 - 14:38
#2
Det var ikke lige sådan. Jeg har lavet følgende men nedtællingen foregår først når der bliver trykket på en start knap. Men den skal tælle ned de 5min hele tiden, også når man ikke er på siden. Når de 5min er gået, skiftes til en anden side hvor der her tælles ned i 20sec. Her er koden jeg har lavet, håber det siger lidt mere.
public Ur(GUIStartside sc,GUILogPaa iq,GUIQuiz frame)
{
this.sc = sc;
this.iq = iq;
this.frame = frame;
if (messageThread == null) {
messageThread = new Thread(this);
}
}
// Thread action
public void run () {
while (true) {
//stopstring= \"Running\";
sec1++;
if (sec1 > 59) {min1++;sec1=0;}
if (min1 == 5) {
stopstring = \"Tiden er udløbet\";
frame.timeup = true;
repaint();
frame.stoppressed = true;
//frame.checkanswer();
//frame.question = 11;
sc.repaint();
messageThread.suspend();
}
//messageThread.suspend();
repaint();
try {messageThread.sleep(1000);}
catch (InterruptedException ire) {}
}
}
public void volgende () {
if (sc.succes) { // true if all spots found
sc.repaint(); // new pictures
}
}
public void paint (Graphics g) {
g.drawString(\"MINUT(TER): \" + (4-min1),10,20);
g.drawString(\"SEKUNDER: \" + (60-sec1),10,40);
g.drawString(stopstring,20,60);
}
/* public void paint (Graphics g){ //tråden til 20 sekunder
g.drawString(\"SEKUNDER: \" + (20-sec1),10,40);
g.drawString(stopstring,20,60);
}*/
// resetter urets variabler
public void Clear() {
running = true;
messageThread.resume(); // Herstart de slapende Thread
sc.succes = false;
}
// pauze method
public void stopff () {
}
// New game actions, næste spørgsmål
public void opnieuw () {
// frame.next.setLabel(\"Next\");
running = true;
}
}