Java tutorial
/* Code from Desktop Java Live Source URL: http://www.sourcebeat.com/downloads/ */ import javax.swing.*; import java.lang.reflect.InvocationTargetException; public class InvokeAndWaitExample extends JPanel { private Thread progressThread; private JProgressBar progressBar; private boolean keepRunning; public InvokeAndWaitExample() { this.keepRunning = true; this.progressThread = new ProgressThread(); this.progressBar = new JProgressBar(); this.progressBar.setMaximum(100); add(this.progressBar); System.out.println(keepRunning); this.progressThread.start(); } private class ProgressThread extends Thread { public void run() { int count = 0; while (keepRunning) { try { Thread.sleep(40); } catch (InterruptedException e) { } final int cval = count; SwingUtilities.invokeLater(new Runnable() { public void run() { progressBar.setValue(cval); } }); count++; if (count == 101) { count = 0; } else if (count == 50) { final int[] returnValue = new int[1]; try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { returnValue[0] = JOptionPane.showConfirmDialog(progressBar, "Would you like to reset progress?", "Prompt", JOptionPane.YES_NO_OPTION); } }); if (returnValue[0] == JOptionPane.YES_OPTION) { count = 0; } } catch (InterruptedException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } } public static void main(String[] a) { JFrame f = new JFrame(); f.setDefaultCloseOperation(1); f.add(new InvokeAndWaitExample()); f.pack(); f.setVisible(true); } }