[Bug AWT/16762] New: Cannot dispatch MouseEvents to components that have just been removed.

gcc-bugzilla at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Tue Jul 27 00:39:00 GMT 2004


>From Bugzilla Helper:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040510

Description of problem:
I have the following piece of code:

    final JFrame f = new JFrame();
    final JButton a = new JButton("button");

    a.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        f.remove(a);
      }
    });

    f.getContentPane().add(a);
    f.pack();
    f.show();


When you click on the button that shows up, it whines about NPEs when
acquiring a target for the mouse events. In Sun's, it does remove the
button (but does not update the frame until you do something to it).

Version-Release number of selected component (if applicable):


How reproducible:
Always

Steps to Reproduce:
Run the sample code.

Actual Results:  Exception thrown is:

Exception during event dispatch:
java.lang.NullPointerException
   at java.awt.Component.getLocationOnScreen()
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at
javax.swing.SwingUtilities.convertPointFromScreen(java.awt.Point,
java.awt.Component)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-javax-swing.so.0.0.0)
   at javax.swing.SwingUtilities.convertPoint(java.awt.Component, int,
int, java.awt.Component)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-javax-swing.so.0.0.0)
   at
java.awt.LightweightDispatcher.acquireComponentForMouseEvent(java.awt.event.MouseEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.LightweightDispatcher.handleEvent(java.awt.AWTEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.Container.dispatchEventImpl(java.awt.AWTEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.Window.dispatchEventImpl(java.awt.AWTEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.Component.dispatchEvent(java.awt.AWTEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at java.awt.EventDispatchThread.run()
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/lib-java-awt.so.0.0.0)
   at _Jv_ThreadRun(java.lang.Thread)
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/libgcj.so.6.0.0)
   at GC_start_routine
(/home/kho/gcj-inst/i686-pc-linux-gnu/libjava/.libs/libgcj.so.6.0.0)
   at __clone (/lib/tls/libc-2.3.3.so)

Expected Results:  The button is removed from the frame.

Additional info:
------- Additional Comments From djee at redhat dot com  2004-05-31 10:26 -------
The problem was in Container.remove().  A removed component should be
set to invisible after it is removed, but this was not being done. 
The Component.getLocationOnScreen() method was getting tripped up over
this inconsistency.

The fix is now in the java-gui-branch.  Please verify with the test
case mentioned in the original bug report.
------- Additional Comments From kho at redhat dot com  2004-05-31 15:14 -------
verified.

-- 
           Summary: Cannot dispatch MouseEvents to components that have just
                    been removed.
           Product: gcc
           Version: 3.5.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P1
         Component: AWT
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: kho at redhat dot com
                CC: gcc-bugs at gcc dot gnu dot org,kho at redhat dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16762



More information about the Gcc-bugs mailing list