package javatesttimer; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; /** * * @web http://java-buddy.blogspot.com/ */ public class JavaTestTimer { static int counter = 0; static JFrameWin jFrameWindow; /** * @param args the command line arguments */ public static void main(String[] args) { SwingUtilities.invokeLater(runJFrameLater); } static Runnable runJFrameLater = new Runnable() { @Override public void run() { jFrameWindow = new JFrameWin(); jFrameWindow.setVisible(true); } }; public static class JFrameWin extends JFrame{ JLabel label; public JFrameWin(){ this.setTitle("java-buddy.blogspot.com"); this.setSize(300, 200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); label = new JLabel(); label.setText("un-initialized!"); JButton buttonStart = new JButton("Start SwingWorker"); buttonStart.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { new MySwingWorker(label).execute(); } }); Box verticalBox = Box.createVerticalBox(); verticalBox.add(buttonStart); verticalBox.add(label); this.add(verticalBox); } public void setLabel(String l){ label.setText(l); } } public static class MySwingWorker extends SwingWorker<String, Integer>{ private JLabel workerLabel; //Constructor public MySwingWorker(JLabel workerLabel) { this.workerLabel = workerLabel; } //in background thread @Override protected String doInBackground() throws Exception { for(int i = 0; i < 10; i++){ publish(i); Thread.sleep(1000); //Perform long-time job } return "DONE"; } //in EDT @Override protected void process(List<Integer> chunks) { for(Integer chunk : chunks){ workerLabel.setText(String.valueOf(chunk)); } } //in EDT @Override protected void done() { try { workerLabel.setText(get()); } catch (InterruptedException ex) { Logger.getLogger(JavaTestTimer.class.getName()).log(Level.SEVERE, null, ex); } catch (ExecutionException ex) { Logger.getLogger(JavaTestTimer.class.getName()).log(Level.SEVERE, null, ex); } } } }
Related:
- javax.swing.Timer and java.util.Timer