    01: import java.util.*;
    02:
    03: /**
    04:    This runnable executes a sort algorithm.
    05:    When two elements are compared, the algorithm
    06:    pauses and updates a panel.
    07: */
    08: public class Sorter implements Runnable
    09: {
    10:    /**
    11:       Constructs the sorter.
    12:       @param values the array to sort
    13:       @param panel the panel for displaying the array
    14:    */
    15:    public Sorter(Double[] values, ArrayComponent panel)
    16:    {
    17:       this.values = values;
    18:       this.panel = panel;
    19:    }
    20:
    21:    public void run()
    22:    {
    23:       Comparator<Double> comp = new
    24:          Comparator<Double>()
    25:          {
    26:             public int compare(Double d1, Double d2)
    27:             {
    28:                panel.setValues(values, d1, d2);
    29:                try
    30:                {
    31:                   Thread.sleep(DELAY);
    32:                }
    33:                catch (InterruptedException exception)
    34:                {
    35:                   Thread.currentThread().interrupt();
    36:                }
    37:                return (d1).compareTo(d2);
    38:             }
    39:          };
    40:       MergeSorter.sort(values, comp);
    41:       panel.setValues(values, null, null);
    42:    }
    43:
    44:    private Double[] values;
    45:    private ArrayComponent panel;
    46:    private static final int DELAY = 100;
    47: }