Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wofür kann ich einen extra Thread in einer GUI Anwendung benutzen?
Ich habe bis jetzt garkeine Threads verwendet wenn ich mit Swing gearbeitet habe. Ich bin mir aber ziemlich sicher, dass man das sollte.
Das Funktionsprinzip von Threads ist mir bekannt, nur habe ich keinerlei Erfahrung in der praktischen Anwendung.
Das heißt wenn ich zB. in einer Klasse einen Algorithmus laufen habe, der mir die Daten ausrechnet, die die GUI dann darstellt, kann ich die Berechnungsklasse in einen eigenen Thread packen? Das bewirkt, dass die Daten parallel zum zeichnen ausgerechnet werden?
Das bewirkt, dass das GUI immer noch auf Eingaben des Nutzers reagieren kann. Wenn du rechenintensive Prozesse nicht in einen eigenen Thread auslagerst, wird das Ganze im GUI Thread ausgeführt und das GUI reagiert nicht mehr.
public class Test {
public static void main(String[] args) {
ScreenFrame sf = new ScreenFrame();
while(true){
sf.repaint();
sf.berechnen();
try{
Thread.sleep(50);
}catch (InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Java:
public class ScreenFrame extends JFrame {
public ScreenFrame() {
//JFrame initialisieren
}
public void berechnen() {
// berechne irgendwas
}
public void repaint() {
// zeichne neu
}
//code...
}
Wie müsste ich nun vorgehen um das berechnen in einem eigenen Thread parallel laufen zu lassen?
Also der Code ist ziemlich suboptimal. Du hast eine Endlosschleife und die Berechnung läuft bis das ganze Programm endet.
Ich finde SwingWorker sehr gut um zeitintensive Dinge im Hintergrund laufen zu lassen: SwingWorker (Java Platform SE 7 )
Dort kann man mit der doInBackground und done Methode sehr einfach angeben was im Hintergrund ausgeführt werden soll und wie am Ende die GUI aktualisiert werden soll. Und bei Bedarf kann man mit der publish bzw process Methode sogar während der Berechnungen die GUI mit Zwischenergebnissen aktualisieren.