Moin
kennt jemand dieses problem?
JO
und gibt es eine lösung dafür ?
JO/Nö:
Es gibt 2 mögliche Gründe:
-
der garbage collector macht Überstunden, dagegen gibt es in java kein Mittel (is aber eher unwahrscheinlich)
-
Das Graphic-Thread-Problem:
Ich nemme an du kannst mit Threads umgehen ? (wenn nicht poste nochmal)
In der JVM läuft ein Thread der sich noch um die „Graphic“ kümmert, also z.b. sicherstellt dass Button reagieren, fenster sich schliessen,… also das ganze GUI.
In diesem Thread werden auch alle events abgearbeitet. Wenn also bei der Abarbeitung eines Event (z.b. ein Klick auf den Button „finde Primzahl“…) ein sehr lange Rechnung angestossen wird blockiert das den Graphic-Thread.
=> das GUI blockiert, die Fenster frieren ein.
codebeispiel:
public void actionPerformed(ActionEvent e) {
//Ab hier steht die Graphik
…
// rausfinden welches Event…
PrimBerechnen (x,y,z); //Das dauert „zu lange“
…
//Ab hier ist wieder alles normal
}
Lösung:
du musst alle rechenintensiven Aufgaben als einzelne Threads implementieren und diese bei der eventabarbeitung starten.
z.b.
class XYZ extends Thread
public XYZ (x,y,z){ //init und Variablen übergeben, nichts Berrechnen.
}
public void run (){
PrimBerechnen (x,y,z); //Das blockiert nur diesen Thread, keine anderen (wichtige).
}
…
public void actionPerformed(ActionEvent e) {
//Ab hier steht die Graphik
…
// rausfinden welches Event…
Thread T = new XYZ (x,y,z);
T.start () // NICHT run();, dieser Aufruf blockiert nicht.
//Ab hier ist wieder alles normal
}
Will man die Graphic flüssig halten darf man diesen Thread auf _keinen_ Fall durch „schwere“ Aufgaben blockieren.
hat’s geholfen ?