Ich habe mal wieder ein Problem! Und zwar bei der Sleep Methode!
Ich hab 2 Threads! Einer berechnet Werte für die Sinuskurve und der andere updated die GUI!
Alle 10 Sekunden legt der Berechnungsthread eine Pause ein! Dies mache ich mit sleep(10000)(Auch 10 Sekunden warten)!
Das funktioniert auch. Nun teile ich aber mit MVC dem anderen Thread mit dass dieser in der Zeit nicht updaten soll. Den UpdateThread auch in einen SleepModus versetzen funkioniert bei mir aber aus irgendeinem Grund nicht!
Hier mal der UpdateThread:
Code:
import java.util.Observable;
import java.util.Observer;
class RepaintThread extends Thread implements Observer{
PicturePanel panel;
RepaintThread(PicturePanel panel) {
this.panel = panel;
this.panel.getModel().addObserver(this);
}
public void run() {
while(true) {
try {
System.out.println("paint");
panel.update(panel.getGraphics());
sleep(40);
}
catch(InterruptedException e) {
}
}
}
public void update(Observable o, Object arg) {
try {
sleep(10000);
} catch (InterruptedException e) {
}
/*
suspend();
long currenttime = System.currentTimeMillis();
int time = this.panel.getModel().getRandom() * 1000;
while(currenttime + time > System.currentTimeMillis()) {
//DoNothing
}
resume();
*/
}
}
Wo liegt mein Problem?
Normal müsste das doch funktionieren oder?
Aha! Interessant! panel.update(panel.getGraphics()); ist Unfug! Du solltest sagen, was "funktioniert nicht" genau bedeutet! Poste notfalls ein compilierbares Beispiel! Sowas wie ein RepaintThread sieht ungewöhnlich aus! Sag ggf. mal genauer, was damit erreicht werden soll!
Wieso ist das Unfug? Er zeichnet einfach die Komponenten neu? Naja das funktioniert an sich auch und das ist nicht das Problem gerade!
Was nicht funktioniert ist, dass wenn die Update Methode aufgerufen wird (Also der andere Thread mit der Werteberechnung eine Pause macht!) der gepostete Thread mit dem neuzeichnen ebenfalls eine Pause macht. Um konkreter zu werden: Die Update Methode wird aufgerufen aber der Thread tut so als wenn sleep(10000) gar nicht darstehen würde! Beide Threads sollen einfach nichts machen für 10 Sekunden! Der eine wurde mit Sleep gestoppt. Dann ist der abgebildete Thread dran und dieser soll ebenfalls nichts machen! Er zeichnet die Grafik aber trotzdem neu! Das weiss ich weil er oben eben System.out.println blabla weiterhin ausgibt!