JDK-4614641 : REGRESSION: showing modal dialog from WindowListener causes lock-up 1.4beta3
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 1.4.0
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_nt
  • CPU: x86
  • Submitted: 2001-12-17
  • Updated: 2001-12-21
  • Resolved: 2001-12-21
Related Reports
Duplicate :  
Description

Name: ddT132432			Date: 12/17/2001


FULL PRODUCT VERSION :
java version "1.4.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build
1.4.0-beta3-b84)
Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed
mode)

FULL OPERATING SYSTEM VERSION :
NT 4.0 service pack 5, dual processor
(Don't have the machine now, so I can't run "ver").


A DESCRIPTION OF THE PROBLEM :
Showing a modal dialog box from a JFrame
WindowListener.windowActivated() causes the application
to lock up. This happens before the contents of the
dialog are displayed. This will happen on any window
activation (not just the first). I don't know if it
matters, but I'm on a  dual-processor machine.

Not sure if this is swing or awt problem.


REGRESSION.  Last worked in version 1.3.1

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Compile and Run my example program.


EXPECTED VERSUS ACTUAL BEHAVIOR :
The contents of the dialog should be displayed (the
"TEST" button). Under 1.4, this does not happen. No
user input is possible, the application is locked up.


This bug can be reproduced always.

---------- BEGIN SOURCE ----------

   import java.awt.event.*;
   import javax.swing.*;

   public class DialogLockup extends JFrame {
      public static void main(String[] args) {
         DialogLockup frame = new DialogLockup();
         frame.addWindowListener(
               new WindowAdapter() {
                  public void windowActivated(WindowEvente) {
                     JDialog dialog = new JDialog();
                     dialog.setModal(true);
                     dialog.getContentPane().add(new JButton("TEST"));
                     dialog.pack();
                     dialog.setVisible(true);
                  }               
               });
      
         frame.setSize(300, 300);
         frame.setVisible(true);
      }
   }

---------- END SOURCE ----------

CUSTOMER WORKAROUND :
Use SwingUtilities.invokeLater() to pop up the dialog.

Release Regression From : 1.3.1
The above release value was the last known release where this 
bug was knwon to work. Since then there has been a regression.

(Review ID: 137424) 
======================================================================

Comments
EVALUATION Here is the backtrace: Full thread dump Java HotSpot(TM) Client VM (1.4.0-rc-b89 mixed mode): "Thread-2" prio=5 tid=0x007839F0 nid=0x13a waiting on monitor [0..6fb14] "AWT-EventQueue-0" prio=7 tid=0x00783EC0 nid=0x132 waiting on monitor [d0df000..d0dfdb8] at java.lang.Object.wait(Native Method) - waiting on <02BB08E0> (a java.awt.EventQueue) at java.lang.Object.wait(Object.java:426) at java.awt.EventQueue.getNextEvent(EventQueue.java:361) - locked <02BB08E0> (a java.awt.EventQueue) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:155) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.SequencedEvent.dispatch(SequencedEvent.java:72) at java.awt.EventQueue.dispatchEvent(EventQueue.java:443) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:134) at java.awt.Dialog.show(Dialog.java:524) at java.awt.Component.show(Component.java:1128) at java.awt.Component.setVisible(Component.java:1083) at DialogLockup$1.windowActivated(DialogLockup.java:38) at java.awt.Window.processWindowEvent(Window.java:1095) at java.awt.Window.processEvent(Window.java:1042) at java.awt.Component.dispatchEventImpl(Component.java:3526) at java.awt.Container.dispatchEventImpl(Container.java:1437) at java.awt.Window.dispatchEventImpl(Window.java:1566) at java.awt.Component.dispatchEvent(Component.java:3367) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1700) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:709) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:323) at java.awt.Component.dispatchEventImpl(Component.java:3396) at java.awt.Container.dispatchEventImpl(Container.java:1437) at java.awt.Window.dispatchEventImpl(Window.java:1566) at java.awt.Component.dispatchEvent(Component.java:3367) at java.awt.EventQueue.dispatchEvent(EventQueue.java:445) at java.awt.SentEvent.dispatch(SentEvent.java:50) at java.awt.DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent.dispatch(DefaultKeyboardFocusManager.java:140) at java.awt.DefaultKeyboardFocusManager.sendMessage(DefaultKeyboardFocusManager.java:164) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:233) at java.awt.Component.dispatchEventImpl(Component.java:3396) at java.awt.Container.dispatchEventImpl(Container.java:1437) at java.awt.Window.dispatchEventImpl(Window.java:1566) at java.awt.Component.dispatchEvent(Component.java:3367) at java.awt.EventQueue.dispatchEvent(EventQueue.java:445) at java.awt.SequencedEvent.dispatch(SequencedEvent.java:105) at java.awt.EventQueue.dispatchEvent(EventQueue.java:443) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130) at java.awt.EventDispatchThread.run(EventDispatchThread.java:98) "AWT-Windows" daemon prio=7 tid=0x0077EEC0 nid=0xf9 runnable [b0cf000..b0cfdb8] at sun.awt.windows.WToolkit.eventLoop(Native Method) at sun.awt.windows.WToolkit.run(WToolkit.java:240) at java.lang.Thread.run(Thread.java:536) "AWT-Shutdown" prio=5 tid=0x0077D2F0 nid=0x156 waiting on monitor [b08f000..b08fdb8] at java.lang.Object.wait(Native Method) - waiting on <02BB0B00> (a java.lang.Object) at java.lang.Object.wait(Object.java:426) at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259) - locked <02BB0B00> (a java.lang.Object) at java.lang.Thread.run(Thread.java:536) "Signal Dispatcher" daemon prio=10 tid=0x0076A120 nid=0x12f waiting on monitor [0..0] "Finalizer" daemon prio=9 tid=0x007660B0 nid=0x164 waiting on monitor [ac8f000..ac8fdb8] at java.lang.Object.wait(Native Method) - waiting on <0303C608> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0303C608> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x00766D50 nid=0x10f waiting on monitor [ac4f000..ac4fdb8] at java.lang.Object.wait(Native Method) - waiting on <0303C528> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:426) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:113) - locked <0303C528> (a java.lang.ref.Reference$Lock) "VM Thread" prio=5 tid=0x00765F80 nid=0x129 runnable "VM Periodic Task Thread" prio=10 tid=0x00769510 nid=0xe2 waiting on monitor "Suspend Checker Thread" prio=10 tid=0x0076AB80 nid=0x108 runnable And an awt only version: import java.awt.*; import java.awt.event.*; public class DialogLockup extends Frame { public static void main(String[] args) { DialogLockup frame = new DialogLockup(); frame.addWindowListener( new WindowAdapter() { public void windowActivated(WindowEvent e) { Dialog dialog = new Dialog(new Frame() { public void show() { // This frame can never be shown } public synchronized void dispose() { try { getToolkit().getSystemEventQueue(); super.dispose(); } catch (Exception e) { // untrusted code not allowed to dispose } } }); dialog.setModal(true); dialog.add(new Component() { public void reshape(int x, int y, int width, int h) { super.reshape(x, y, width, h); System.out.println("reshape: " + width + " " + h); } public void paint(Graphics g) { g.setColor(Color.yellow); g.fillRect(0, 0, getWidth(), getHeight()); } public Dimension getPreferredSize() { return new Dimension(100, 100); } }, BorderLayout.CENTER); dialog.pack(); dialog.setVisible(true); } }); frame.setSize(300, 300); frame.setVisible(true); } } It is also worth noting that on Solaris the Dialog comes up, but nothing is painted. ###@###.### 2001-12-17 I think this might be another manifestation of 4614594, etc. ###@###.### 2001-12-17 Name: osR10079 Date: 12/21/2001 The same problem as in 4531693. Close as duplicate. ###@###.### 21 Dec 2001 ======================================================================
24-08-2004