import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author Remi Forax
 *
 */
public class EventTest2 {

  public static class MyEventQueue extends EventQueue {
    public void dispatchEvent(AWTEvent event) {
      super.dispatchEvent(event);
    }
  }

  public static void main(String[] args) {

    JButton button=new JButton("test 2");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.out.println("thread "+Thread.currentThread());
      }
    });

    JFrame frame= new JFrame();
    frame.setSize(400, 300);
    frame.setContentPane(button);
    frame.show();

    System.out.println("thread "+Thread.currentThread());

    Toolkit toolkit= Toolkit.getDefaultToolkit();

    EventQueue queue= toolkit.getSystemEventQueue();

    MyEventQueue myEventQueue= new MyEventQueue();

    queue.push(myEventQueue);

    for (;;) {
      AWTEvent event;
      try {
        event= myEventQueue.getNextEvent();
      } catch (InterruptedException e1) {
        e1.printStackTrace();
        continue;
      }

      System.out.println("event " + event);
      myEventQueue.dispatchEvent(event);
    }
  }
}
