schmitzm.swing
Class SwingWorker

java.lang.Object
  extended by java.lang.Thread
      extended by schmitzm.lang.WorkingThread
          extended by schmitzm.swing.SwingWorker
All Implemented Interfaces:
Runnable

public class SwingWorker
extends WorkingThread

Diese Klasse stellt einen Thread dar, der (aufwendigere) Arbeiten innerhalb einer GUI ausfuehrt, damit diese nicht blockiert.
Dem SwingWorker kann ein StatusDialog (modal!) zugeordnet werden. Ist dies der Fall kehrt der Thread nicht aus seiner start()-Routine zurueck sondern sperrt mit dem Dialog die zugrunde liegende GUI. Ist die "Arbeit" beendet schliesst der Thread automatisch den Dialog, so dass die GUI wieder zugeaenglich wird. Zudem kann die Arbeit des SwingWorker jederzeit ueber den Abbruch-Button des StatusDialog beendet werden.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)

Nested Class Summary
static class SwingWorker.Work
          Diese Klasse spezifiziert die Arbeit eines SwingWorker.
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
protected  boolean canceled
          Speichert, ob der Worker (durch einen Fehler) abgebrochen wurde (true) oder seine Arbeit erfolgreich ausgefuehrt hat (false).
protected  StatusDialog dialog
          Speichert den Dialog, der waehrend der Arbeit des SwingWorkers angezeigt wird.
protected  boolean keepOpen
          Speichert, ob der Dialog nach Beendigung der Arbeit offen gehalten soll (Default: false).
protected  SwingWorker.Work work
          Speichert den Arbeitsablauf fuer den Thread.
protected  Object workResult
          Resultat von SwingWorker.Work.execute().
 
Fields inherited from class schmitzm.lang.WorkingThread
listeners, mode, MODE_PAUSE, MODE_READY, MODE_RUN, MODE_TERMINATE
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
SwingWorker(SwingWorker.Work work)
          Erzeugt einen neuen SwingWorker.
SwingWorker(SwingWorker.Work work, Frame parent, String statusMess)
          Erzeugt einen neuen SwingWorker.
SwingWorker(SwingWorker.Work work, Frame parent, String statusMess, double relX, double relY)
          Erzeugt einen neuen SwingWorker.
SwingWorker(SwingWorker.Work work, StatusDialog dialog)
          Erzeugt einen neuen SwingWorker.
 
Method Summary
 StatusDialog getDialog()
          Liefert den Dialog, der waehrend der Arbeit des Threads angezeigt wird.
 Object getWorkResult()
          Liefert nach der Beendigung des Threads dessen Ergebnis.
 boolean isCanceled()
          Liefert true, wenn der Worker (aufgrund eines Fehlers oder manuell durch den Dialog) abgebrochen wurde.
 boolean isKeptOpen()
          Prueft, ob der Dialog nach Beendigung der Arbeit geoeffnet bleibt.
 void performDispose()
          Wird ausgefuehrt nachdem der Thread beendet wurde.
 void performInit()
          Initialisierung des Threads.
 void performWork()
          Fuehrt die dem Thread zugeordnete Arbeit aus und verarbeitet auftretende Fehler.
 void setKeepOpen(boolean keepOpen)
          Bestimmt, ob der Dialog nach Beendigung der Arbeit geoeffnet bleibt.
 void start()
          Startet den Thread.
 void terminate()
          Bricht die Arbeit des Threads unmittelbar und unkontrolliert ab.
 
Methods inherited from class schmitzm.lang.WorkingThread
addThreadListener, checkBreakingCommands, fireThreadInitialised, fireThreadPaused, fireThreadResumed, fireThreadStarted, fireThreadStopped, getMode, goSleep, isRunning, isSleeping, pause, removeThreadListener, run, toString, wakeUp
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, stop, stop, suspend, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

work

protected SwingWorker.Work work
Speichert den Arbeitsablauf fuer den Thread.


dialog

protected StatusDialog dialog
Speichert den Dialog, der waehrend der Arbeit des SwingWorkers angezeigt wird.


keepOpen

protected boolean keepOpen
Speichert, ob der Dialog nach Beendigung der Arbeit offen gehalten soll (Default: false).

See Also:
setKeepOpen(boolean)

canceled

protected boolean canceled
Speichert, ob der Worker (durch einen Fehler) abgebrochen wurde (true) oder seine Arbeit erfolgreich ausgefuehrt hat (false).


workResult

protected Object workResult
Resultat von SwingWorker.Work.execute(). Kann nach Beendigung des Threads ueber getWorkResult() abgefragt werden.

Constructor Detail

SwingWorker

public SwingWorker(SwingWorker.Work work)
Erzeugt einen neuen SwingWorker. Waehrend der Arbeit wird kein Dialog angezeigt. Der Thread kehrt unmittelbar aus seiner start()-Routine zurueck, so dass eine untergeordnete GUI nicht blockiert.

Parameters:
work - auszufuehrende Arbeit

SwingWorker

public SwingWorker(SwingWorker.Work work,
                   StatusDialog dialog)
Erzeugt einen neuen SwingWorker. Der Thread kehrt nicht aus seiner start()-Routine zurueck, sondern zeigt den (modalen) Dialog an, so dass eine untergeordnete GUI gesperrt wird.

Parameters:
work - auszufuehrende Arbeit
dialog - anzuzeigender Dialog (modal!)

SwingWorker

public SwingWorker(SwingWorker.Work work,
                   Frame parent,
                   String statusMess)
Erzeugt einen neuen SwingWorker. Der Thread kehrt nicht aus seiner start()-Routine zurueck, sondern zeigt einen (modalen) Dialog an, so dass eine untergeordnete GUI gesperrt wird.

Parameters:
work - auszufuehrende Arbeit
parent - uebergeordnete GUI (kann null sein!)
statusMess - Meldung, die im Dialog angezeigt wird

SwingWorker

public SwingWorker(SwingWorker.Work work,
                   Frame parent,
                   String statusMess,
                   double relX,
                   double relY)
Erzeugt einen neuen SwingWorker. Der Thread kehrt nicht aus seiner start()-Routine zurueck, sondern zeigt einen (modalen) Dialog an, so dass eine untergeordnete GUI gesperrt wird.

Parameters:
work - auszufuehrende Arbeit
parent - uebergeordnete GUI (kann null sein!)
statusMess - Meldung, die im Dialog angezeigt wird
relX - horizontale Positionierung des Dialogs relativ zum uebergeordneten Fenster
relY - vertikale Positionierung des Dialogs relativ zum uebergeordneten Fenster
Method Detail

setKeepOpen

public void setKeepOpen(boolean keepOpen)
Bestimmt, ob der Dialog nach Beendigung der Arbeit geoeffnet bleibt. Standardmaessig wird der Dialog automatisch geschlossen.

Parameters:
keepOpen - wenn false wird der Dialog nach Beendigung der Arbeit automatisch geschlossen.

isKeptOpen

public boolean isKeptOpen()
Prueft, ob der Dialog nach Beendigung der Arbeit geoeffnet bleibt. Standardmaessig wird der Dialog automatisch geschlossen.

See Also:
setKeepOpen(boolean)

start

public void start()
Startet den Thread. Wurde ein Dialog angegeben/erzeugt wird dieser nach dem Thread-Start angezeigt und blockiert den untergeordneten Ablauf. Der Thread kehrt erst nach Beendigung seiner Arbeit oder wenn der Dialog abgebrochen wurde, aus dieser Methode zurueck.

Overrides:
start in class WorkingThread
See Also:
WorkingThread.performInit()

performWork

public void performWork()
Fuehrt die dem Thread zugeordnete Arbeit aus und verarbeitet auftretende Fehler.

Specified by:
performWork in class WorkingThread
See Also:
SwingWorker.Work.execute(), SwingWorker.Work.performError(Throwable)

performInit

public void performInit()
Initialisierung des Threads. Macht nichts!

Specified by:
performInit in class WorkingThread

performDispose

public void performDispose()
Wird ausgefuehrt nachdem der Thread beendet wurde. Schliesst einen evt. vorhandenen Dialog, so dass eine untergeordnete GUI wieder freigegeben wird.

Specified by:
performDispose in class WorkingThread

terminate

public void terminate()
Bricht die Arbeit des Threads unmittelbar und unkontrolliert ab.

Overrides:
terminate in class WorkingThread
See Also:
Thread.stop()

getDialog

public StatusDialog getDialog()
Liefert den Dialog, der waehrend der Arbeit des Threads angezeigt wird.

Returns:
null falls kein Dialog angegeben wurde.

isCanceled

public boolean isCanceled()
Liefert true, wenn der Worker (aufgrund eines Fehlers oder manuell durch den Dialog) abgebrochen wurde.


getWorkResult

public Object getWorkResult()
Liefert nach der Beendigung des Threads dessen Ergebnis.

See Also:
SwingWorker.Work.execute()