Ben: Thread - Progress-Dialog

Hallo zusammen

Ich habe ein Objekt, welches eine länger andauernde Berechnung macht. Zusätzlich habe ich ein anderes Objekt, welches den Fortschritt der Berechnung grafisch anzeigt.

Damit das dann funktioniert, muss ich für das Fortschritts-Objekt ja einen Thread erstellen. Ich habe jetzt dazu eine Verständnis-Frage:

Wie teile ich dem Fortschritts-Objekt mit, wieweit die Berechnung schon fortgeschritten ist? Wenn ich einen Fortschritts-Thread eröffnet habe, kann ich dann ja vom Berechnungs-Objekt nicht mehr auf die Methoden des Fortschritt-Threads zugreifen, oder?

Oder habe ich grundsätzlich etwas falsch verstanden?

Danke und Gruss
Ben

  1. Hallo Ben,

    Wie teile ich dem Fortschritts-Objekt mit, wieweit die Berechnung schon fortgeschritten ist? Wenn ich einen Fortschritts-Thread eröffnet habe, kann ich dann ja vom Berechnungs-Objekt nicht mehr auf die Methoden des Fortschritt-Threads zugreifen, oder?

    Ein Thread hat keine Methoden. Klassen bzw Objekte haben Methoden und diese kannst Du auch von jedem Thread aus aufrufen. Daten kannst Du dazwischen über Objekteigenschaften austauschen. Je nach dem was Du austauschst musst Du aber darauf achten, dass Threads nicht gleichzeitig zugreifen. Viele Datenstrukturen sind von sich aus auch nicht für den gleichzeitigen Zugriff mehrerer Threads geeignet.
    Du solltest Dir vielleicht erst einmal ein paar Grundlagen über Threading anlesen. Einfach rumzuprobieren ist da etwas schwierig, weil viele Fehler nicht sofort und nicht reproduzierbar auftreten. Guck also mal in ein Buch, bspw. in dieses: http://www.galileocomputing.de/openbook/javainsel6/

    Seit Java 6 gibt es auch eine Klasse SwingWorker, die genau dem Zweck, Berechnungen in Swing-Anwendungen im Hintergrund laufen zu lassen, dient. Da sind auch schon Mechanismen zum Daten- und Fortschrittsaustausch vorgesehen.
    Wenn Du das richtig verwendest musst Du schon eigentlich nichts mehr über Threading wissen, außer Du willst irgendwie an den vorgesehenen Schnittstellen vorbei noch zwischen den Threads Daten austauschen.

    Grüße

    Daniel