examples
Class ActionExample4

java.lang.Object
  extended by org.jdesktop.application.AbstractBean
      extended by org.jdesktop.application.Application
          extended by examples.ActionExample4

public class ActionExample4
extends Application

An @Action that executes a background Task.

This example demonstates the use of a background Task. If an @Action returns a Task, it's executed on a worker thread, and monitored by the application framework.

When executed, the ListFilesTask Task class recursively lists all of the files beginning with some root, and publishes the files it finds, 10 at a time. A private subclass of ListFilesTask overrides the Task.process method to update a JList's ListModel with the new files:

 private class DoListFiles extends ListFilesTask {
    public DoListFiles(File root) {
         super(root);
         listModel.clear();
     }
     @Override protected void process(List<File> files) {
         if (!isCancelled()) {
             listModel.addAll(files);
         }
     }
 }
 

The example's go @Action, keeps a reference to the DoListFiles background Task so that the stop @Action can cancel it:

 private Task doListFiles = null;
 @Action public Task go() {
     stop(); // maybe cancel pending Task
     doListFiles = new DoListFiles(getRootFile());
     setStopEnabled(true);
     return doListFiles;
 }
 @Action(enabledProperty = "stopEnabled") public void stop() {
     if ((doListFiles != null) && (doListFiles.cancel(true))) {
         setStopEnabled(false);
     }
 }
 
The Action's resources are initialized from a ResourceBundle, as with ActionExample2. Additionally, the ListFilesTask's title and description properties are initialized from the resources/ListFilesTask.properties ResourceBundle:
 ListFilesTask.title = List Files
 ListFilesTask.description = List all of the files accessible from some root directory
 ListFilesTask.directoryMessage = Listing files in {0}
 
The directoryMessage resource is used by ListFilesTask to format a message each time a new directory is listed.

See Also:
Action, Task

Nested Class Summary
 
Nested classes/interfaces inherited from class org.jdesktop.application.Application
Application.ExitListener
 
Constructor Summary
ActionExample4()
           
 
Method Summary
 Task go()
          The go @Action.
 boolean isStopEnabled()
           
static void main(java.lang.String[] args)
           
 void setStopEnabled(boolean stopEnabled)
           
protected  void startup()
          Responsible for starting the application; for creating and showing the initial GUI.
 void stop()
          The stop @Action.
 
Methods inherited from class org.jdesktop.application.Application
addExitListener, end, exit, exit, getContext, getExitListeners, getInstance, getInstance, hide, initialize, launch, quit, ready, removeExitListener, show, shutdown
 
Methods inherited from class org.jdesktop.application.AbstractBean
addPropertyChangeListener, addPropertyChangeListener, firePropertyChange, firePropertyChange, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ActionExample4

public ActionExample4()
Method Detail

go

@Action
public Task go()
The go @Action.

Cancel the pending DoListFiles Task and then return a new one. We add a PropertyChangeListener to the new Task so that we can monitor its "message" property.

Returns:
the new background Task
See Also:
stop()

stop

@Action(enabledProperty="stopEnabled")
public void stop()
The stop @Action.

Cancel the pending DoListFiles Task, if there is one.

See Also:
go()

isStopEnabled

public boolean isStopEnabled()

setStopEnabled

public void setStopEnabled(boolean stopEnabled)

startup

protected void startup()
Description copied from class: Application
Responsible for starting the application; for creating and showing the initial GUI.

This method is called by the static launch method, subclasses must override it. It runs on the event dispatching thread.

Specified by:
startup in class Application
See Also:
Application.launch(java.lang.Class, java.lang.String[]), Application.initialize(java.lang.String[]), Application.shutdown()

main

public static void main(java.lang.String[] args)