Mega Code Archive

 
Categories / Java by API / Javax Swing
 

SwingUtilities invokeLater(Runnable doRun)

import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class InvokeExample {   private static JButton good = new JButton("Good");   private static JButton bad = new JButton("Bad");   private static JButton bad2 = new JButton("Bad2");   private static JLabel resultLabel = new JLabel("Ready", JLabel.CENTER);   public static void main(String[] args) {     JFrame f = new JFrame();     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     JPanel p = new JPanel();     p.add(good);     p.add(bad);     p.add(bad2);     Container c = f.getContentPane();     c.setLayout(new BorderLayout());     c.add(p, BorderLayout.CENTER);     c.add(resultLabel, BorderLayout.SOUTH);     good.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent ev) {         resultLabel.setText("Working . . .");         setEnabled(false);         Thread worker = new Thread() {           public void run() {             try {               Thread.sleep(5000);             } catch (InterruptedException ex) {             }             SwingUtilities.invokeLater(new Runnable() {               public void run() {                 resultLabel.setText("Ready");                 setEnabled(true);               }             });           }         };         worker.start();       }     });     bad.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent ev) {         resultLabel.setText("Working . . .");         setEnabled(false);         try {           Thread.sleep(5000);         } catch (InterruptedException ex) {         }         resultLabel.setText("Ready");         setEnabled(true);       }     });     bad2.addActionListener(new ActionListener() {       public void actionPerformed(ActionEvent ev) {         resultLabel.setText("Working . . . ");         setEnabled(false);         SwingUtilities.invokeLater(new Runnable() {           public void run() {             try {               Thread.sleep(5000); // Dispatch thread is starving!             } catch (InterruptedException ex) {             }             resultLabel.setText("Ready");             setEnabled(true);           }         });       }     });     f.setSize(300, 100);     f.setVisible(true);   }   // Allows us to turn the buttons on or off while we work.   static void setEnabled(boolean b) {     good.setEnabled(b);     bad.setEnabled(b);     bad2.setEnabled(b);   } }