<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Visual test</title><link>https://sourceforge.net/p/jparallelloops/wiki/Visual%2520test/</link><description>Recent changes to Visual test</description><atom:link href="https://sourceforge.net/p/jparallelloops/wiki/Visual%20test/feed" rel="self"/><language>en</language><lastBuildDate>Tue, 02 Jul 2013 09:28:52 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/jparallelloops/wiki/Visual%20test/feed" rel="self" type="application/rss+xml"/><item><title>Visual test modified by Krzysztof Dębski</title><link>https://sourceforge.net/p/jparallelloops/wiki/Visual%2520test/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;/&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;
 * Copyright (c) 2009-2013 Krzysztof Dębski. &lt;br /&gt;
 * All rights reserved.&lt;br /&gt;
&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;*&lt;/em&gt;&lt;/strong&gt;/&lt;br /&gt;
package pfor.sample;&lt;/p&gt;
&lt;p&gt;import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.image.BufferedImage;&lt;br /&gt;
import java.util.Random;&lt;br /&gt;
import java.util.Timer;&lt;br /&gt;
import java.util.TimerTask;&lt;br /&gt;
import java.util.concurrent.ExecutionException;&lt;br /&gt;
import java.util.concurrent.Future;&lt;br /&gt;
import java.util.concurrent.atomic.AtomicBoolean;&lt;/p&gt;
&lt;p&gt;import javax.swing.BoxLayout;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JCheckBox;&lt;br /&gt;
import javax.swing.JComboBox;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JLabel;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.JProgressBar;&lt;br /&gt;
import javax.swing.JSpinner;&lt;br /&gt;
import javax.swing.JToggleButton;&lt;br /&gt;
import javax.swing.SpinnerNumberModel;&lt;br /&gt;
import javax.swing.SwingUtilities;&lt;/p&gt;
&lt;p&gt;import pfor.CompletionCallback;&lt;br /&gt;
import pfor.PTask;&lt;br /&gt;
import pfor.ParallelContext;&lt;br /&gt;
import pfor.ProgressCallback;&lt;br /&gt;
import pfor.annotations.Speed.SpeedType;&lt;br /&gt;
import pfor.closures.index.IndexAction;&lt;br /&gt;
import pfor.closures.range.RangeAction;&lt;br /&gt;
import pfor.sample.util.Stopwatch;&lt;/p&gt;
&lt;p&gt;import com.spinn3r.log5j.Logger;&lt;/p&gt;
&lt;p&gt;public class VisualTest implements CompletionCallback, ProgressCallback {&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;SuppressWarnings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;serial&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;static&lt;/span&gt; &lt;span class="nb"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DebugException&lt;/span&gt; &lt;span class="nx"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DrawIndexAction&lt;/span&gt; &lt;span class="nx"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;IndexAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;DrawIndexAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;SpeedType&lt;/span&gt; &lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;this.rowCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;Override&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;void&lt;/span&gt; &lt;span class="nb"&gt;perform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;throws&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;work&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;Thread&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentThread&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;colors.length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;DrawRangeAction&lt;/span&gt; &lt;span class="nx"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;RangeAction&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;DrawRangeAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;SpeedType&lt;/span&gt; &lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;this.rowCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nx"&gt;Override&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;void&lt;/span&gt; &lt;span class="nb"&gt;perform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="nb"&gt;end&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;throws&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="k"&gt;thread&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;Thread&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentThread&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="bp"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nx"&gt;colors.length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nb"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;start&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nb"&gt;end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;work&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rowCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;thread&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;ExecutionType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;ASYNCHRONOUS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FAST_CANCEL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SYNCHRONOUS&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;enum&lt;/span&gt; &lt;span class="nx"&gt;ForType&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;PFOR_INDEX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PFOR_RANGE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;SIMPLE_LOOP&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nf"&gt;static&lt;/span&gt; &lt;span class="nx"&gt;final&lt;/span&gt; &lt;span class="nx"&gt;Logger&lt;/span&gt; &lt;span class="k"&gt;log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Logger.getLogger&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;static&lt;/span&gt; &lt;span class="bp"&gt;void&lt;/span&gt; &lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="err"&gt;[&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt; args) throws InterruptedException, ExecutionException {
    final VisualTest test = new VisualTest();
    test.loopRepaint();
};

BufferedImage image;

Graphics2D graphics;
final static Color&lt;span class="cp"&gt;[]&lt;/span&gt; colors = { Color.RED, Color.BLUE, Color.CYAN, Color.GREEN, Color.MAGENTA,
        Color.GRAY, Color.WHITE, Color.PINK };
volatile Future&lt;span class="nt"&gt;&amp;lt;Void&amp;gt;&lt;/span&gt; future = null;
JComboBox speedCombo = new JComboBox(SpeedType.values());
JComboBox executionCombo = new JComboBox(ExecutionType.values());
final SpinnerNumberModel threadsSpinnerModel = new SpinnerNumberModel(2, 1, 100, 1);
final SpinnerNumberModel xSpinnerModel = new SpinnerNumberModel(500, 1, 1000, 1);
final SpinnerNumberModel ySpinnerModel = new SpinnerNumberModel(500, 1, 1000, 1);
JPanel panel;
final JPanel outerPanel = new JPanel();
final JPanel topPanel = new JPanel();
final JPanel controlPanel = new JPanel();
final JPanel optionsPanel = new JPanel();
final JPanel bottomPanel = new JPanel();
final JFrame frame = new JFrame();
final JButton startB = new JButton(&amp;quot;Start (pfor indexed based)&amp;quot;);
final JButton rangeB = new JButton(&amp;quot;Start (pfor range based)&amp;quot;);
final JButton simpleB = new JButton(&amp;quot;Start (plain loop)&amp;quot;);
final JButton cancelB = new JButton(&amp;quot;Cancel&amp;quot;);
final JToggleButton exceptionB = new JToggleButton(&amp;quot;Exception&amp;quot;);
final JButton resetB = new JButton(&amp;quot;Reset&amp;quot;);

final Stopwatch stopwatch = new Stopwatch();
final JLabel timeL = new JLabel(&amp;quot;      &amp;quot;);
final JCheckBox completeBox = new JCheckBox(&amp;quot;Completion notyfication&amp;quot;, true);

final JCheckBox progressBox = new JCheckBox(&amp;quot;Progress notyfication&amp;quot;, true);
final JCheckBox excBox = new JCheckBox(&amp;quot;Cancel on exception&amp;quot;, true);

JProgressBar progressBar;

ParallelContext context;

int steps;

int foo;

static final AtomicBoolean throwException = new AtomicBoolean(false);

private VisualTest() {
    final JSpinner threadsS = new JSpinner(threadsSpinnerModel);
    final JSpinner xS = new JSpinner(xSpinnerModel);
    final JSpinner yS = new JSpinner(ySpinnerModel);

    startB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                start(ForType.PFOR_INDEX);
            } catch (final DebugException e) {
                e.printStackTrace();
            }
        }
    });

    rangeB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                start(ForType.PFOR_RANGE);
            } catch (final DebugException e) {
                e.printStackTrace();
            }
        }
    });

    simpleB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                start(ForType.SIMPLE_LOOP);
            } catch (final DebugException e) {
                e.printStackTrace();
            }
        }
    });

    cancelB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            cancel();
        }
    });

    exceptionB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            throwException();
        }
    });

    resetB.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            reset();
        }
    });

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            topPanel.add(new JLabel(&amp;quot;Threads:&amp;quot;));
            topPanel.add(threadsS);
            topPanel.add(new JLabel(&amp;quot;X:&amp;quot;));
            topPanel.add(xS);
            topPanel.add(new JLabel(&amp;quot;Y:&amp;quot;));
            topPanel.add(yS);
            topPanel.add(new JLabel(&amp;quot;Assumed task speed:&amp;quot;));
            topPanel.add(speedCombo);
            topPanel.add(new JLabel(&amp;quot;Execution type:&amp;quot;));
            topPanel.add(executionCombo);
            optionsPanel.add(progressBox);
            optionsPanel.add(completeBox);
            optionsPanel.add(excBox);

            controlPanel.add(startB);
            controlPanel.add(rangeB);
            controlPanel.add(simpleB);
            controlPanel.add(cancelB);
            controlPanel.add(exceptionB);
            controlPanel.add(resetB);
            controlPanel.add(timeL);

            outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));
            outerPanel.add(topPanel);
            outerPanel.add(optionsPanel);
            outerPanel.add(controlPanel);
            outerPanel.add(bottomPanel);

            frame.setSize(new Dimension(600, 600));
            frame.getContentPane().add(outerPanel);
            frame.pack();

            reset();
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    });

}

private void cancel() {
    cancelB.setEnabled(false);

    if (future != null) {
        future.cancel(true);
    }

    frame.repaint();
};

private void disableStart() {
    startB.setEnabled(false);
    rangeB.setEnabled(false);
    simpleB.setEnabled(false);
}

@SuppressWarnings(&amp;quot;serial&amp;quot;)
private void loop(int threads, SpeedType speed, ForType forType) throws DebugException {

    final int x = (Integer) xSpinnerModel.getNumber();
    final int y = (Integer) ySpinnerModel.getNumber();
    steps = x * y;

    image = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB);
    graphics = image.createGraphics();
    if (panel != null) {
        bottomPanel.remove(panel);
    }

    if (progressBar != null) {
        controlPanel.remove(progressBar);
    }

    progressBar = new JProgressBar(0, steps + 1);
    controlPanel.add(progressBar);

    panel = new JPanel() {
        @Override
        public void paint(Graphics g) {
            super.paint(g);
            final Graphics2D graphics2D = (Graphics2D) g;
            graphics2D.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null);
        }

    };

    panel.setSize(new Dimension(x, y));
    panel.setPreferredSize(new Dimension(x, y));
    bottomPanel.add(panel);

    frame.pack();

    if (context != null) {
        context.shutdown();
    }

    context = ParallelContext.newInstance(threads);

    stopwatch.start();
    if (forType == ForType.SIMPLE_LOOP) {
        simpleFor(x, y);
        return;
    }

    PTask&lt;span class="nt"&gt;&amp;lt;Void&amp;gt;&lt;/span&gt; action = forType == ForType.PFOR_INDEX ? context.getPFor().each(
            new DrawIndexAction(x, speed), 0, steps) : context.getPFor().eachRange(
            new DrawRangeAction(x, speed), 0, steps);

    final ExecutionType executionType = (ExecutionType) executionCombo.getSelectedItem();
    if (progressBox.isSelected()) {
        action = action.withProgressCallback(this);
    }

    if (completeBox.isSelected()) {
        action = action.withCompletionCallback(this);
    }

    if (excBox.isSelected()) {
        action = action.withCancellationOnException();
    }

    cancelB.setEnabled(true);
    if (executionType == ExecutionType.SYNCHRONOUS) {
        stopwatch.start();
        try {
            action.execute();
        } catch (final Exception e) {
            log.warn(&amp;quot;execute() failed&amp;quot;, e);
        }
        onProgress(steps);
        reset();
    } else {
        future = action.executeAsynchronously(executionType == ExecutionType.FAST_CANCEL);
    }

}

private void loopRepaint() {
    new Timer().scheduleAtFixedRate(new TimerTask() {
        public void run() {
            frame.repaint();
        }
    }, 0, 200);

}

@Override
public void onComplete(Future&lt;span class="nt"&gt;&amp;lt;Void&amp;gt;&lt;/span&gt; future) {
    log.debug(&amp;quot;onComplete&amp;quot;);
    try {
        future.get();
    } catch (final Exception e) {
        log.warn(&amp;quot;get() failed&amp;quot;, e);
    } finally {
        reset();
        timeL.setText(stopwatch.getTimeDifference().toString());
    }
}

@Override
public void onProgress(int totalStepsCompleted) {
    progressBar.setValue(totalStepsCompleted);
    timeL.setText(stopwatch.getTimeDifference().toString());
}

private void reset() {
    cancelB.setEnabled(false);
    startB.setEnabled(true);
    rangeB.setEnabled(true);
    simpleB.setEnabled(true);
}

private void simpleFor(int rowCount, int colCount) throws DebugException {
    final int sum = rowCount * colCount;
    final int thread = (int) Thread.currentThread().getId() % colors.length;
    for (int j = 0; j &lt;span class="nt"&gt;&amp;lt; sum&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;++)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;work&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;rowCount&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;thread&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;onProgress&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;sum&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
    &lt;span class="na"&gt;reset&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="na"&gt;private&lt;/span&gt; &lt;span class="na"&gt;void&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;ForType&lt;/span&gt; &lt;span class="na"&gt;forType&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;throws&lt;/span&gt; &lt;span class="na"&gt;DebugException&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;disableStart&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;

    &lt;span class="na"&gt;loop&lt;/span&gt;&lt;span class="err"&gt;((&lt;/span&gt;&lt;span class="na"&gt;Integer&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;threadsSpinnerModel&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="err"&gt;(),&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;SpeedType&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;speedCombo&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSelectedItem&lt;/span&gt;&lt;span class="err"&gt;(),&lt;/span&gt;
            &lt;span class="na"&gt;forType&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;

    &lt;span class="na"&gt;frame&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;repaint&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="na"&gt;protected&lt;/span&gt; &lt;span class="na"&gt;void&lt;/span&gt; &lt;span class="na"&gt;throwException&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;throwException&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;true&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="na"&gt;private&lt;/span&gt; &lt;span class="na"&gt;void&lt;/span&gt; &lt;span class="na"&gt;work&lt;/span&gt;&lt;span class="err"&gt;()&lt;/span&gt; &lt;span class="na"&gt;throws&lt;/span&gt; &lt;span class="na"&gt;DebugException&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;final&lt;/span&gt; &lt;span class="na"&gt;Random&lt;/span&gt; &lt;span class="na"&gt;r =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt; &lt;span class="na"&gt;Random&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
    &lt;span class="na"&gt;if&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;throwException&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAndSet&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;false&lt;/span&gt;&lt;span class="err"&gt;))&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;exceptionB&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getModel&lt;/span&gt;&lt;span class="err"&gt;().&lt;/span&gt;&lt;span class="na"&gt;setSelected&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;false&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
        &lt;span class="na"&gt;throw&lt;/span&gt; &lt;span class="na"&gt;new&lt;/span&gt; &lt;span class="na"&gt;DebugException&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;

    &lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;bar =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;0;&lt;/span&gt;
    &lt;span class="na"&gt;for&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;j =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;0;&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt; &lt;span class="err"&gt;&amp;lt;&lt;/span&gt; &lt;span class="na"&gt;1000&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt; &lt;span class="na"&gt;j&lt;/span&gt;&lt;span class="err"&gt;++)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;bar&lt;/span&gt; &lt;span class="err"&gt;+=&lt;/span&gt; &lt;span class="na"&gt;r&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
    &lt;span class="err"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;foo&lt;/span&gt; &lt;span class="err"&gt;+=&lt;/span&gt; &lt;span class="na"&gt;bar&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="na"&gt;private&lt;/span&gt; &lt;span class="na"&gt;void&lt;/span&gt; &lt;span class="na"&gt;work&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;rowCount&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;thread&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="na"&gt;throws&lt;/span&gt; &lt;span class="na"&gt;DebugException&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;final&lt;/span&gt; &lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;row =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;i&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt; &lt;span class="na"&gt;rowCount&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;final&lt;/span&gt; &lt;span class="na"&gt;int&lt;/span&gt; &lt;span class="na"&gt;col =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;i&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt; &lt;span class="na"&gt;rowCount&lt;/span&gt;&lt;span class="err"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;work&lt;/span&gt;&lt;span class="err"&gt;();&lt;/span&gt;
    &lt;span class="na"&gt;synchronized&lt;/span&gt; &lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;final&lt;/span&gt; &lt;span class="na"&gt;Color&lt;/span&gt; &lt;span class="na"&gt;color =&lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="s"&gt;colors&lt;/span&gt;&lt;span class="cp"&gt;[&lt;/span&gt;&lt;span class="k"&gt;thread&lt;/span&gt;&lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="s"&gt;;&lt;/span&gt;
        &lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setColor&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;
        &lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="na"&gt;drawRect&lt;/span&gt;&lt;span class="err"&gt;(&lt;/span&gt;&lt;span class="na"&gt;col&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;row&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;1&lt;/span&gt;&lt;span class="err"&gt;);&lt;/span&gt;

    &lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Krzysztof Dębski</dc:creator><pubDate>Tue, 02 Jul 2013 09:28:52 -0000</pubDate><guid>https://sourceforge.net7b0fa1643d0fe3e6212153f9bcbe6a9cf0657b3f</guid></item></channel></rss>