Hallo,
habe ein Problem mit Threads. Etwas kompliziert zu erklären, ich versuchs mal erst allgemein.
Es werden mehrere Bildchen dargestellt. Wird auf eines geklickt, so soll das Programm fortgesetzt werden. Dies funktioniert.
Jetzt soll es aber so sein, daß, wenn niemand klickt, es nach spätestens z.B 10 Sekunden ebenfalls fortgesetzt wird. Also müßte ich doch einen zusätzlichen Thread starten, der quasi 10 Sekunden wartet und danach den Thread 1 informiert, daß es weitergeht.
Ich poste hier mal Quellcode. Zuerst mal den Hauptteil meines Programms
Das Problem ist die Klasse abwarter:
Wie kann ich das Problem lösen? Also so wartet er zwar, aber reagiert nicht auf Klicks auf die Bilder, denn dann soll er ja weiterlaufen. Mein Thread von wrt1 schiebt sich also vor th1 statt daß er parallel dazu läuft.
[/b]
habe ein Problem mit Threads. Etwas kompliziert zu erklären, ich versuchs mal erst allgemein.
Es werden mehrere Bildchen dargestellt. Wird auf eines geklickt, so soll das Programm fortgesetzt werden. Dies funktioniert.
Jetzt soll es aber so sein, daß, wenn niemand klickt, es nach spätestens z.B 10 Sekunden ebenfalls fortgesetzt wird. Also müßte ich doch einen zusätzlichen Thread starten, der quasi 10 Sekunden wartet und danach den Thread 1 informiert, daß es weitergeht.
Ich poste hier mal Quellcode. Zuerst mal den Hauptteil meines Programms
Code:
public void zahlenspiel()
{
//addWindowListener(new WindowClosingAdapter(true));
}
String commandstring;
public void ablauf()
{
abwarter wrt1= new abwarter(); <------Deklaration einer Instanz von Klasse abwarter
MyMouseListener w1 = new MyMouseListener();
int rwert;
addKeyListener(new MyKeyListener());
addMouseListener(new MyMouseListener());
synchronized (th1) {
while(spielnr<=5){ //Anzahl der Spiele
while (i<=75) //Bildwechseldauer
{
sperre=1;
zufallszahl();
repaint();
try {
th1.sleep(25);
}catch (InterruptedException exc){
//nix
}
i++;
} //inneres while-Ende
//zufallszahl(); //lese Werte aus Datenbank
//repaint();
repaint();
sperre=0;
jetzt_klicken=1;
//Freigabe-Sound abspielen
try{
playsamplefile("klickfreigabe.wav",0,0);}catch(Exception e){//nothing
}
//repaint();
repaint();
i=0;
wrt1.run(); <----------hier starte ich doch den Thread von wrt1, oder??? <--hier liegt mein Problem
!!! sobald diese Zeile, also wrt1.run() nicht auskommentiert ist, klappts nicht !!!
try {th1.wait();}catch (InterruptedException e){} <---- funktioniert, bei Mausklick setzt Funktion
// MousePressed th1.notify() und Prog läuft weiter
spielnr++;
t_klicken=0; //Klicksperre aktivieren
}
}
try{
stmt = cn.createStatement();
//$sqlstring="INSERT INTO spielwillige (nick) VALUES ('$spielername')";
String spieler="\"Pucki\"";
commandstring="INSERT INTO highscores (nick, score) VALUES (" + spieler + " , " + punktestand +")";
rwert=stmt.executeUpdate(commandstring);
}
//rs=stmt.executeQuery("Select nickname,punktestand from aktivespieler");}
catch(Exception e){e.printStackTrace();}
// nach letzter Spielrunde: Pause und Ende des Spiels
try{
repaint();
Thread.sleep(50000);
}catch (InterruptedException exc){
exc.printStackTrace();
//nix
}
System.exit(0);
}
Das Problem ist die Klasse abwarter:
Code:
public class abwarter extends Thread implements Runnable //warte einige Zeit
{
abwarter thread;
hz1=0; //Schleifenvariable
public void start()
{
if (thread==null){
Thread thread = new Thread(this);
thread.start();
}
}
public void run()
{
synchronized(th1){
for (hz1=10;hz1>0;hz1--) //warte 10 Sekunden
{
try{thread.sleep(1000);}catch(InterruptedException ex){}
}
th1.notify(); //informiere th1, daß Wartezeit beendet
}
}
} //ende Klasse abwarter
Wie kann ich das Problem lösen? Also so wartet er zwar, aber reagiert nicht auf Klicks auf die Bilder, denn dann soll er ja weiterlaufen. Mein Thread von wrt1 schiebt sich also vor th1 statt daß er parallel dazu läuft.
[/b]