Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

Componenten auf einer JDesktopPane überprüfen

<< < (3/6) > >>

Ralf_M_Petter:
Hallo MadMetzger!

Ist mir zwar jetzt etwas unklar, warum du einen neuen Thread machst. Aber genau in diesem neuen Thread darfst du nicht auf Swing Klassen zugreifen, da du ja dann nicht mehr im Event Handler Thread bist.

Grüße

Ralf

flaite:
Aus dem Kopf:
1. Du packst Operationen in einen neuen Thread, wenn die Operation relativ viel Ressourcen (= Zeit) benötigt (z.B. ein RDBMS call). Sonst friert nämlich die Gui ein. In dem code-snippet, das wir hier diskutieren, brauchst du das gar nicht.
2. Wenn du einen neuen Thread benutzen solltest (wg. 1), dann sollte man das nur über SwingUtilities.invokeLater() machen.
3. Um das ganze Thread-Management Zeugs einfacher zu machen, gibt es von Sun die Klasse SwingWorker (suche auf Java.net). Ausserdem noch ein paar openSource Projekte, die aber weitgehend in dem JavaLobby Link erklärt werden. 

MadMetzger:
Also den neuen Thread mache ich nur auf, um in einer Statuszeile untem im Fenster die von der gefangenen Exception mitgelieferte Message auszugeben und weiter arbeiten zu können. Also wenn ich Threadmäßig was an der GUI machen will, sollte ich mit SwingUtilities.InvokeLater arbeiten?

flaite:
Die Aktion benötigt nicht viele Ressourcen.
Du brauchst das überhaupt nicht in einen neuen Thread tun.
Neuer Thread nur, wenn der code wirklich viele Ressourcen benötigt (Kandidaten: Calls gegen Lotus Notes/RDBMS/Filesystem/ Webservices)

Ralf_M_Petter:
Ja wie schon mehrmals gesagt, du darfst von anderen Threads als der Event Handler Thread Swing Objekte nicht verändern. Falls du in einem anderen Thread bist, musst du über invokeLater die Änderungen an den Swing Objekten machen. Normalerweise schaut die Aktion so aus.

Benutzer klickt einen Button.
Der Event Handler Code des Buttons muß eine länger dauernde Operation durchführen, deshalb startet er einen neuen Thread der z.B. Daten aus einer SQL Datenbank ausliest. In der Zwischenzeit werden neue Ereignisse in der Gui ausgeführt. Das heisst, dass Fenster reagiert auf den Benutzer. Wenn der neue Thread fertig ist, muß er mit invokeLater wieder Code starten, der die Ergebnisse z.B. an das Tablemodell einer JTable übergibt.

Grüße

Ralf

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln