wait und notify oder wie soll ich es lösen

Status
Nicht offen für weitere Antworten.

Proggy

Bekanntes Mitglied
Hallo,

jetzt wird's kompliziert, denke ich. Also, mein Programm gibt einen Datensatz aus, danach soll auf einen Mausklick innerhalb eines bestimmten Bereiches (Abfrage über x- und y-Koordinaten) gewartet werden. Erfolgt ein Klick oder sind 20 Sekunden vergangen, so soll der nächste Datensatz angezeigt werden usw. Das Ganze erinnert an ein Fragenspiel, bei dem der Spieler max. 20 Sekunden Zeit zum Beantworten einer Frage hat. Mein Problem ist das Anhalten der Fragenausgabe, damit der Spieler Zeit zum Klicken hat. Nach spätestens 20 Sekunden soll die nächste Frage erscheinen.

Hier mal ein wenig Code:
Code:
try{
		stmt = con.createStatement();
		rs=stmt.executeQuery("Select * from politikfragen1");
		while(rs.next()){
			rs.getString(1);
			anzahlfragenintabelle++;    //zählen der Datensätze in Tabelle
		    } 
		
	    rs.beforeFirst();      //setze result-set auf ersten Datensatz
		
	   repaint();
	  
	 
	   
	  for (zz1=1;zz1<=anzahlfragenintabelle;zz1++)    //gebe Fragen aus
	     {
	      rs.next();
          richtigeantwort=rs.getInt("richtig");
          aktfrage=rs.getString("Frage");
	      antworta=rs.getString("A");
	      antwortb=rs.getString("B");
	      antwortc=rs.getString("C");
	      antwortd=rs.getString("D");
          
	      repaint();
	      th1.wait();       <---------------------------------------hier will ich thread1 in den Wartezustand setzen
	     
	      
	      
	     } 
	}catch(Exception e){e.printStackTrace();}

weiter unten frage ich ab, wo gecklickt wurde:
Code:
class MyMouseListener extends MouseAdapter implements Runnable
{
public void run()
{

}



	public void mousePressed(MouseEvent event)
	{
	    
		koorx=event.getX();
		koory=event.getY();
		if ((koorx>=500&&koorx<=600)&&(koory>=400&&koory<=500)) //Abfrage, ob Start gedrückt
		   {	 
		    if(wahlzeit>0) //wenn Zeitfaktor ausgewählt wurde
		      { 	
		    	aktiv=1;   //Spiel darf starten
		      } 
		    koorx=koory=0;
		    repaint();
		   } 
		if ((koorx>=500&&koorx<=658)&&(koory>=220&&koory<=253))   //Zeit 15 sec angeklickt
		   {
			zeitbild15=getImage(getCodeBase(),"zeitbild15h.jpg");
			zeitbild20=getImage(getCodeBase(),"zeitbild20.jpg");
			repaint();
		    wahlzeit=15;
		   }
		if ((koorx>=500&&koorx<=658)&&(koory>=260&&koory<=293))   //Zeit 20 sec angeklickt
		   {
			zeitbild15=getImage(getCodeBase(),"zeitbild15.jpg");
			zeitbild20=getImage(getCodeBase(),"zeitbild20h.jpg");
			repaint();
		    wahlzeit=20;
		   }
		
		
		
		
		
		
		if ((koorx>=82&&koorx<=100)&&(koory>=70&&koory<=95))
	      {	
	    	gegebeneantwort=1;   //Antwort A wurde angeklickt
	    	antwortgegeben=1;    //Frage gilt als beantwortet
	    	if (gegebeneantwort==richtigeantwort)  //wenn Frage richtig beantwortet
	    	  {
	    		korrekt=1;     //antwort korrekt, richtig-Logo anzeigen
	    	  }else{korrekt=0;} //antwort falsch, falsch-Logo anzeigen
	    	repaint();
	        
	    	koorx=koory=0;
	    	
	      }
		if ((koorx>=82&&koorx<=100)&&(koory>=110&&koory<=135))
	      {	
	    	gegebeneantwort=2;   //Antwort B wurde angeklickt
	    	antwortgegeben=1;    //Frage gilt als beantwortet
	    	if (gegebeneantwort==richtigeantwort)  //wenn Frage richtig beantwortet
	    	  {
	    		korrekt=1;     //antwort korrekt, richtig-Logo anzeigen
	    	  }else{korrekt=0;} //antwort falsch, falsch-Logo anzeigen
	    	repaint();
	        
	    	koorx=koory=0;
	    	
	      }
		if ((koorx>=82&&koorx<=100)&&(koory>=150&&koory<=175))
	      {	
	    	gegebeneantwort=3;   //Antwort C wurde angeklickt
	    	antwortgegeben=1;    //Frage gilt als beantwortet
	    	if (gegebeneantwort==richtigeantwort)  //wenn Frage richtig beantwortet
	    	  {
	    		korrekt=1;     //antwort korrekt, richtig-Logo anzeigen
	    	  }else{korrekt=0;} //antwort falsch, falsch-Logo anzeigen
	    	repaint();
	        
	    	koorx=koory=0;
	    	
	      }
		if ((koorx>=82&&koorx<=100)&&(koory>=190&&koory<=215))
	      {	
	    	gegebeneantwort=4;   //Antwort D wurde angeklickt
	    	antwortgegeben=1;    //Frage gilt als beantwortet
	    	if (gegebeneantwort==richtigeantwort)  //wenn Frage richtig beantwortet
	    	  {
	    		korrekt=1;     //antwort korrekt, richtig-Logo anzeigen
	    	  }else{korrekt=0;} //antwort falsch, falsch-Logo anzeigen
	    	repaint();
	        
	    	koorx=koory=0;
	    	
	      }
		
		
		
	}

Sobald also eine der vier letzten if-Bedingungen erfüllt ist, soll's weitergehen, oder spätestens nach 20 Sekunden.

Wer kann mir helfen? Ich weiss, Gegenstück zu wait() ist notify(), aber wie mache ich das, dass es funzt???

D a n k e![/code]
 
B

Beni

Gast
"wait" ist eine Methode die jedes Objekt besitzt, und hält den aufrufenden Thread an. Also wenn X "wait" aufruft, hält X an, und niemand sonst.
"notify" auf dasselbe Objekt angewandt (natürlich aus einem anderen Thread, der wartende Thread kann ja nichts machen), weckt den wartenden Thread wieder auf.
Es ist nicht möglich einen anderen Thread als den eigenen anzuhalten, dein "thread1" müsste also selbst erkennen, wann er einzuschlafen hat.
 

DocRandom

Top Contributor
Moin Proggy!

Ich würde an Deiner Stelle das ganze etwas anders lösen!
Es ist nicht sehr Sinvoll innerhalb des Threads die Datenbank zu durchforsten, auch wenn diese rel. klein bzw. am selben System liegt.
Da ja der Thread nach Deiner Bechreibung nur 20 Sekunden laufen soll!
Viel besser wäre es die Daten in einem Objekt zu kapseln, also für jede Frage + Antworten ein Objekt!
Diese Objekte stellst Du in eine Liste oder Collection, wie auch immer, ist eben Geschmackssache.
Die Antworten, die der Benutzer durchführt kannst Du ebenfalls in einem eigenen Objekt oder Array speichern.

Danach erstellst Du eine Klasse, die sich um das setzen der Fragen und möglichen Antworten kümmert.
Diese sprichst Du z.B. über einen Timer bzw. TimerTask an.
Du kannst dabei sogar eine Kalibrierung durchführen, wenn Du die selbe Klasse einmal ohne Timer durchlaufen lässt und so die millisekunden misst, die sie zur Ausführung braucht.
Danch nimmst Du 20000 + die Ausführungszeit um genau die 20 Sekunden an Zeit für den Benutzer zur Verfügung zu haben!

Bitte sehe das nicht als eine ultimative Lösung an, es ist dies nur meine persönliche Meinung zu Deiner Problematik.

mfg
DocRandom
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
M notify und wait Java Basics - Anfänger-Themen 1
D Stack-Objekt - LIFO - wait(); notify(); Java Basics - Anfänger-Themen 0
D Probleme mit wait(), notify() Java Basics - Anfänger-Themen 0
M wait/notify bei Socket Java Basics - Anfänger-Themen 4
Luk10 Monitor: wait() und notify() Java Basics - Anfänger-Themen 8
S Threads: wait() und notify() Java Basics - Anfänger-Themen 11
S bin zu blöd für threads - wait, notify, synchronized Java Basics - Anfänger-Themen 11
B Problem: wait() -> notify() Java Basics - Anfänger-Themen 4
M Threads, wait() und notify() Java Basics - Anfänger-Themen 10
G Threads steuern mit wait und notify Java Basics - Anfänger-Themen 2
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
M Threads synchronized und wait Java Basics - Anfänger-Themen 2
BlueFox Greenfoot wait() Java Basics - Anfänger-Themen 10
A wait() problem Java Basics - Anfänger-Themen 3
G wait()-Mehtode Java Basics - Anfänger-Themen 13
T meinThread.wait(); wirft immer Exeption & hat kein Effekt Java Basics - Anfänger-Themen 15
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
M wait() sleep() geht nicht wirklich Java Basics - Anfänger-Themen 3
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
D Wait und Image Java Basics - Anfänger-Themen 3
U wait Java Basics - Anfänger-Themen 2
O Problem bei der Synchronisierung von Threads (wait&notif Java Basics - Anfänger-Themen 4
C java.util.Timer und wait() oder so was Java Basics - Anfänger-Themen 3
I Threads Multithreading, Producer/Consumer, notify() Java Basics - Anfänger-Themen 6
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
M Threads notify/notifyAll Philosophen-Problem Java Basics - Anfänger-Themen 14
M Threads notify Java Basics - Anfänger-Themen 6
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
M lock notify synchronisation Java Basics - Anfänger-Themen 8
S Problem mit notify() Java Basics - Anfänger-Themen 4
M Warum kann man dem Thread kein notify senden? Java Basics - Anfänger-Themen 15
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
DrahtEck Schleife soll wieder da anfangen wo ich es möchte ! Java Basics - Anfänger-Themen 17
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Com.Roter Wie soll ich lernen? Java Basics - Anfänger-Themen 17
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
I aus 2 random zahlen soll nur die ungerade summe der beiden genommen werden. Java Basics - Anfänger-Themen 13
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
R App soll selbstständig reagieren, anstatt via Models Java Basics - Anfänger-Themen 0
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
B Java Programm soll mit Python kommunizeren Java Basics - Anfänger-Themen 1
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
MichelNeedhelp Brauche zu diesem Labyrinth ein Skript? Der Hamster soll im Urzeigersinn das ganze Labyrinth abgehen und wieder an seinem Ursprungsplatz sein. Java Basics - Anfänger-Themen 40
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
S Scanner soll Groß-/ Kleinschreibung ignorieren Java Basics - Anfänger-Themen 2
E Division von BigInteger soll Gelitkommazahl liefern Java Basics - Anfänger-Themen 46
M Unterklasse soll nicht alle Methoden erben Java Basics - Anfänger-Themen 3
E Methode soll andere Methode der selben Klasse aufrufen Java Basics - Anfänger-Themen 28
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
H Koordinateneingabe im 2D Array soll true/false zurückgeben Java Basics - Anfänger-Themen 5
D Etwas unsicher wie es weitergehen soll Java Basics - Anfänger-Themen 2
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
B Derzeit JSF - Projekt, später soll MobileApp folgen Java Basics - Anfänger-Themen 5
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
V Vererbung Subklasse soll Superklasse verändern Java Basics - Anfänger-Themen 2
T Random soll Zufallszahl beibehalten. Java Basics - Anfänger-Themen 11
C Objekt soll ein Array sein. Java Basics - Anfänger-Themen 15
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
W Eigener Iterator soll mehrdimensionales Array durchlaufen Java Basics - Anfänger-Themen 4
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
J Kopierte Datei soll alte ersetzen. Java Basics - Anfänger-Themen 6
A Variablen Main Klasse soll auf eine andere Klasse zugreifen Java Basics - Anfänger-Themen 3
I Programm tut nicht was es soll :) Java Basics - Anfänger-Themen 5
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
kilopack15 Methode soll int-Array zurückgeben Java Basics - Anfänger-Themen 2
S Variable in JTextField soll immer um 5 zunehmen Java Basics - Anfänger-Themen 8
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
W drawLine(...) - Linie soll nur begrenzt lang sein Java Basics - Anfänger-Themen 9
I Fenster A soll Fenster B schliessen Java Basics - Anfänger-Themen 5
A Variablen Variable soll ihren Wert nach Initialisierung nicht mehr ändern Java Basics - Anfänger-Themen 2
TheMenox Methoden Bestimmung an welche Methode eine andere Methode ihren Wert weitergeben soll Java Basics - Anfänger-Themen 35
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
K Objekt soll Anwendung über Änderungen informieren Java Basics - Anfänger-Themen 8
X Einfache Frage; wie soll ich die spezielle float var speichern? Java Basics - Anfänger-Themen 2
C Ein Button soll Focus rausfinden und Methode starten Java Basics - Anfänger-Themen 9
M Panel erstellen, welches ein Control erhält. Ausgabe soll über einen Stream erfolgen. Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben