// UseMainThread - Continue startup with main thread import javax.swing.*; import java.awt.*; import java.awt.event.*; public class UseMainThread extends JFrame implements ActionListener, WindowListener { volatile boolean bLoaded1 = false; // load1 done? JButton jbPressMe = new JButton("Press Me"); JComboBox jcb = new JComboBox(); JLabel jlName = new JLabel("Name:"); JTextField jtfName = new JTextField(15); JTextArea jta = new JTextArea( 5, 30 ); public UseMainThread() { super( "Main Thread Processing" ); setResizable(false); addWindowListener( this ); jta.setEditable( false ); JPanel jpNorth = new JPanel(); jpNorth.add( new JScrollPane( jta ) ); jbPressMe.addActionListener( this ); jcb.setEnabled( false ); JPanel jpCenter = new JPanel(); jpCenter.add( jlName ); jpCenter.add( jtfName ); jpCenter.add( jbPressMe ); jpCenter.add( jcb ); Container myCP = getContentPane(); myCP.add( jpNorth, BorderLayout.NORTH ); myCP.add( jpCenter, BorderLayout.SOUTH ); setLocation( 100, 100 ); pack(); show(); // continue to other tasks after AWT thread start Thread.currentThread().setPriority( Thread.MIN_PRIORITY ); sleeper(1); load1(); load2(); } // end constructor void load1() { // simulate a time taking task sleeper(5000); // 5 seconds jta.append("load1 complete." + "\n" ); bLoaded1 = true; } // end load1 void load2() { // simulate a time taking task sleeper(2000); jta.append("load2 complete." + "\n" ); jcb.setEnabled( true ); Thread.currentThread().setPriority( Thread.NORM_PRIORITY ); } // end load2 void sleeper( int iValue ) { try { Thread.sleep( iValue ); } catch( InterruptedException ie ) {} } // end sleeper public void actionPerformed(ActionEvent e) { Object oSource = e.getSource(); if( oSource == jbPressMe ) { if( !bLoaded1 ) { setCursor( Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR )); // if not complete, wait while( !bLoaded1 ) { sleeper(50); } setCursor( Cursor.getDefaultCursor() ); } // end if !bLoaded1 // now do work associated with button jta.append("From Press Me: I was pressed." + "\n" ); return; } // end if jbPressMe } // end actionPerformed // Window Listener Implementation public void windowOpened(WindowEvent e) { jta.append( "Window Opened." + "\n" ); } public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} // End Window Listener Implementation public static void main(String[] args) { new UseMainThread(); } } // end class UseMainThread