title image


Smiley Re: AAHHH !!!! Threads sprengen meinen Verstand !!! AAHHH !
Jaja - repaint() hat mich auch schonmal zur Verzweiflung gebracht!repaint() legt nämlich von sich aus einen eigenen Thread an - wie man an dem einfachen Bespiel mit der globalen Variable unten erkennen kann:[blabla]int dreck=0;void test { System.out.println("Dreck vorher: "+ dreck); repaint(); System.out.println("Dreck nachher: "+dreck);}public void paint(Graphics g) { dreck++;}Jetzt ist die Systemausgabe aber nur in ca. 50% der Fälle das was man erwarten würde - nämlichDreck vorher: 0Dreck nachher: 1aber in den anderen 50% der Fälle ist die AusgabeDreck vorher: 0Dreck nachher: 0Das liegt daran, daß repaint() nicht einfach nur die Paintmethode mit dem Grafikkontext g aufruft, sondern dies in einem eigenen Thread tut!D.h. er springt in die Aufrufende Funktion zurück, noch bevor(!) die paint-Methode fertig ist!Das ist auch durchaus sinnvoll - sonst würde bei grafikintensiven Anwendungen der Bildaufbau das Programm blockieren.Außerdem hat repaint() noch eine weitere (unangenehme) Eigenschaft - es führt paint(g) NUR DANN erneut aus, wenn der letzte aufruf der paint(g) Methode BEENDET ist.Also wenn ich eine for-Schleife schreibe, die repaint() 50 Mal aufruftfor(int i=0;idann heisst das NICHT, daß paint(g) 50x ausgeführt wird!Und das erklärt auch Dein Phänomen, wieso es zwei verschiedene Bilder ergibt:Wenn Du in paint(g) eine Pause machst, wird paint() viel seltener aufgerufen als ohne Pause!Und selbst ohne Pause läuft Dein paint(g) wohl nicht die ganzen 10x durch - sonder so zwischen 7 und 10 mal. Das hängt vollkommen von Deiner Hardware ab, und wieviel Rechenzeit für Dein Programm noch übrig ist!Ich hoffe ich konnte Dir helfen,Puri

Schöne Grüße
Puri




geschrieben von


Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: