Mega Code Archive

 
Categories / Java / Threads
 

Eliminating race Conditions using Swing Components

// : c14:InvokeLaterFrame.java // Eliminating race Conditions using Swing Components. // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.SwingUtilities; public class InvokeLaterFrame extends JFrame {   private JTextField statusField = new JTextField("Initial Value");   public InvokeLaterFrame() {     Container cp = getContentPane();     cp.add(statusField, BorderLayout.NORTH);     addWindowListener(new WindowAdapter() {       public void windowOpened(WindowEvent e) {         try { // Simulate initialization overhead           Thread.sleep(2000);         } catch (InterruptedException ex) {           throw new RuntimeException(ex);         }         statusField.setText("Initialization complete");       }     });   }   public static void main(String[] args) {     final InvokeLaterFrame ilf = new InvokeLaterFrame();     run(ilf, 150, 60);     // Use invokeAndWait() to synchronize output to prompt:     // SwingUtilities.invokeAndWait(new Runnable() {     SwingUtilities.invokeLater(new Runnable() {       public void run() {         ilf.statusField.setText("Application ready");       }     });     System.out.println("Done");   }   public static void run(JFrame frame, int width, int height) {     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setSize(width, height);     frame.setVisible(true);   } } ///:~