//: gui/InterruptableLongRunningCallable.java // Using Callables for long-running tasks. import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.concurrent.*; import net.mindview.util.*; import static net.mindview.util.SwingConsole.*; class CallableTask extends Task implements Callable { public String call() { run(); return "Return value of " + this; } } public class InterruptableLongRunningCallable extends JFrame { private JButton b1 = new JButton("Start Long Running Task"), b2 = new JButton("End Long Running Task"), b3 = new JButton("Get results"); private TaskManager manager = new TaskManager(); public InterruptableLongRunningCallable() { b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { CallableTask task = new CallableTask(); manager.add(task); System.out.println(task + " added to the queue"); } }); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { for(String result : manager.purge()) System.out.println(result); } }); b3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Sample call to a Task method: for(TaskItem tt : manager) tt.task.id(); // No cast required for(String result : manager.getResults()) System.out.println(result); } }); setLayout(new FlowLayout()); add(b1); add(b2); add(b3); } public static void main(String[] args) { run(new InterruptableLongRunningCallable(), 200, 150); } } ///:~