Swing invoke and wait
/*
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);
}
}
Related examples in the same category