Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4409397

AccessControlException occurs during drag on modal dialog (diff PACKAGES)

XMLWordPrintable

    • beta2
    • x86
    • windows_nt

      Name: boT120536 Date: 01/29/2001


      >> java -version
      java version "1.3.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
      Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)

      If you attempt to perform a drag operation from a modal dialog,
      and the component which has the drag&drop capability is located
      in a different package, it spits out an error and locks up the program.
      This bug only occurs on Windows. Windows NT4.0 is all I have tested it on.
      Solaris works fine.

      Here's the source code for a test program.
      -----------------------------------------------------
      package test;
      import javax.swing.*;
      import java.awt.*;
      import java.awt.event.*;
      import treeutil.DnDTree;

      public class TreeTest extends JPanel
      {
          public static JDialog dialog;
          private DnDTree tree;


          public TreeTest()
          {
              super(new BorderLayout());
              JPanel buttonPanel = new JPanel();
              tree = new DnDTree();
              add("Center", tree);
          }

          public static void main(String[] args)
          {
              JFrame frame = new JFrame("JTree Test");
              JButton showButton = new JButton("Show");
              showButton.addActionListener(new ActionListener()
              {
                 public void actionPerformed(ActionEvent e)
                 {
                     dialog.setVisible(true);
                 }
              });
              frame.getContentPane().add("Center", showButton);
              dialog = new JDialog(frame, "Test", true);
              dialog.setSize(300, 200);
              dialog.getContentPane().add("Center", new TreeTest());
              frame.addWindowListener(new WindowAdapter() {
                  public void windowClosing(WindowEvent e) { System.exit(0); }
              });

              frame.pack();
              frame.setVisible(true);
          }
      }


      ---------

      package treeutil;
      import java.awt.datatransfer.*;
      import javax.swing.*;
      import javax.swing.tree.*;
      import java.awt.*;
      import java.awt.event.*;
      import java.awt.dnd.*;
      import java.util.*;

      public class DnDTree extends JTree implements DragGestureListener,
      DragSourceListener, DropTargetListener
      {
          protected DragSource dragSource = DragSource.getDefaultDragSource();
          public DnDTree()
          {
             super();

              DropTarget dropTarget = new DropTarget (this, this);
              dragSource.createDefaultDragGestureRecognizer( this,
      DnDConstants.ACTION_MOVE, this );
          }

          ////////////////////////////////////////////////////////////////////////
          // DropTargetListener implementation
          ////////////////////////////////////////////////////////////////////////

          public void dragEnter(DropTargetDragEvent dropTargetDragEvent) { }
          public void dragExit(DropTargetEvent dropTargetEvent) { }
          public void dropActionChanged(DropTargetDragEvent dropTargetDragEvent){}
          public void dragOver(DropTargetDragEvent dropTargetDragEvent)
          {
              System.out.println("in DnDTree dragOver");
          }
          public void drop(DropTargetDropEvent dropTargetDropEvent) { }

          ////////////////////////////////////////////////////////////////////////
          // DragSourceListener implementation
          ////////////////////////////////////////////////////////////////////////

          public void dragDropEnd(DragSourceDropEvent dsde) { }
          public void dragEnter(DragSourceDragEvent dsde) { }
          public void dragOver(DragSourceDragEvent dsde) { }
          public void dropActionChanged(DragSourceDragEvent dsde) { }

          public void dragExit(DragSourceEvent dse) { }

          ////////////////////////////////////////////////////////////////////////
          // DragGestureListener implementation
          ////////////////////////////////////////////////////////////////////////

          public void dragGestureRecognized( DragGestureEvent dge )
          {
              dge.startDrag( null, new StringSelection("hello"), this);
          }
      }

      The key to reproducing this problem is the packages.
      Create a test directory somewhere, and within that directory create the
      directories "util/treeutil" and "prog/test"
      Place TreeTest.java in the prog/test directory, and DnDTree.java in
      the util/treeutil directory.

      Set up your classpath correctly, ex:

      CLASSPATH=".;\\d:\\test\\util;\\d:\\test\\prog"
      Compile the files and run - java test.TreeTest

      Press the show button to get the dialog with the tree, and attempt to drag
      a node.
      Note that you get the following error and the program locks up:

      Exception occurred during event dispatching:
      java.security.AccessControlException: access denied (java.awt.AWTPermission
      acceptDropBetweenAccessControllerCo
              at java.security.AccessControlContext.checkPermission(Unknown Source)
              at java.security.AccessController.checkPermission(Unknown Source)
              at
      sun.awt.windows.WDropTargetContextPeer.getJVMLocalSourceTransferable(Unknown
      Source)
              at sun.awt.windows.WDropTargetContextPeer.processEnterMessage(Unknown
      Source)
              at sun.awt.windows.WDropTargetContextPeer.run(Unknown Source)
              at java.awt.event.InvocationEvent.dispatch(Unknown Source)
              at java.awt.EventQueue.dispatchEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpOneEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.Dialog.show(Unknown Source)
              at java.awt.Component.show(Unknown Source)
              at java.awt.Component.setVisible(Unknown Source)
              at test.TreeTest$1.actionPerformed(TreeTest.java:34)
              at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
              at
      javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
              at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
              at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
              at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown
      Source)
              at java.awt.Component.processMouseEvent(Unknown Source)
              at java.awt.Component.processEvent(Unknown Source)
              at java.awt.Container.processEvent(Unknown Source)
              at java.awt.Component.dispatchEventImpl(Unknown Source)
              at java.awt.Container.dispatchEventImpl(Unknown Source)
              at java.awt.Component.dispatchEvent(Unknown Source)
              at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
              at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
              at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
              at java.awt.Container.dispatchEventImpl(Unknown Source)
              at java.awt.Window.dispatchEventImpl(Unknown Source)
              at java.awt.Component.dispatchEvent(Unknown Source)
              at java.awt.EventQueue.dispatchEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpOneEvent(Unknown Source)
              at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
              at java.awt.EventDispatchThread.run(Unknown Source)


      --------------------------------------------------------------------
      If the dialog is made non-modal, it doesn't occur.
      Also if the files are in the same package it doesn't occur.
      (Review ID: 109917)
      ======================================================================


      Date: Thu, 1 Mar 2001 12:43:19 +0300
      From: "Danila A. Sinopalnikov" <###@###.###>
      To: David Mendenhall <###@###.###>
      Cc: ###@###.###
      Subject: Re: Bug 4409397
      Mime-Version: 1.0
      Content-Disposition: inline
      User-Agent: Mutt/1.2.5i

      Hi Dave,

      I reproduced this bug on WinNT with 1.3 and b52.
      It is important that the packages doesn't have the common root.
      That is the bug is not reptoducible if the packages are located at
      <path>\test and <path>\treeutil. The bug is reproducible if the
      packages are located at <path>\test and <other_path>\treeutil.
      Looks like the classes should be in different entries of CLASSPATH.
      Here are the stack traces:

      Z:\bug\b4409397\test\prog>echo %CLASSPATH%
      .;Z:\bug\b4409397\test\util;Z:\bug\b4409397\test\prog

      Z:\bug\b4409397\test\prog>J:\jdk1.3\win32\bin\java -version
      java version "1.3.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
      Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)

      Z:\bug\b4409397\test\prog>J:\jdk1.3\win32\bin\java test.TreeTest
      Exception occurred during event dispatching:
      java.security.AccessControlException: access denied (java.awt.AWTPermission acceptDropBetweenAccessControllerContexts)
              at java.security.AccessControlContext.checkPermission(AccessControlContext.java:272)
              at java.security.AccessController.checkPermission(AccessController.java:399)
              at sun.awt.windows.WDropTargetContextPeer.getJVMLocalSourceTransferable(WDropTargetContextPeer.java:130)
              at sun.awt.windows.WDropTargetContextPeer.processEnterMessage(WDropTargetContextPeer.java:526)
              at sun.awt.windows.WDropTargetContextPeer.run(WDropTargetContextPeer.java:449)
              at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:154)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:317)
              at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
              at java.awt.Dialog.show(Dialog.java:370)
              at java.awt.Component.show(Component.java:946)
              at java.awt.Component.setVisible(Component.java:903)
              at test.TreeTest$1.actionPerformed(TreeTest.java:29)
              at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)
              at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504)
              at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378)
              at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:250)
              at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216)
              at java.awt.Component.processMouseEvent(Component.java:3717)
              at java.awt.Component.processEvent(Component.java:3546)
              at java.awt.Container.processEvent(Container.java:1164)
              at java.awt.Component.dispatchEventImpl(Component.java:2595)
              at java.awt.Container.dispatchEventImpl(Container.java:1213)
              at java.awt.Component.dispatchEvent(Component.java:2499)
              at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451)
              at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2216)
              at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125)
              at java.awt.Container.dispatchEventImpl(Container.java:1200)
              at java.awt.Window.dispatchEventImpl(Window.java:912)
              at java.awt.Component.dispatchEvent(Component.java:2499)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:319)
              at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)

      Z:\bug\b4409397\test\prog>P:\JDK1.4.0beta-b52\win32\bin\java -version
      java version "1.4.0-beta"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta-b52)
      Java HotSpot(TM) Client VM (build B52, mixed mode)

      Z:\bug\b4409397\test\prog>P:\JDK1.4.0beta-b52\win32\bin\java test.TreeTest
      java.security.AccessControlException: access denied (java.awt.AWTPermission acceptDropBetweenAccessControlContexts)
              at java.security.AccessControlContext.checkPermission(AccessControlContext.java:274)
              at java.security.AccessController.checkPermission(../../../src/share/classes/java/security/AccessController.java:400)
              at sun.awt.dnd.SunDropTargetContextPeer.getJVMLocalSourceTransferable(SunDropTargetContextPeer.java:121)
              at sun.awt.dnd.SunDropTargetContextPeer.processEnterMessage(SunDropTargetContextPeer.java:314)
              at sun.awt.dnd.SunDropTargetContextPeer.access$500(SunDropTargetContextPeer.java:58)
              at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEnterEvent(SunDropTargetContextPeer.java:795)
              at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:767)
              at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:32)
              at java.awt.Component.dispatchEventImpl(Component.java:3345)
              at java.awt.Container.dispatchEventToSelf(Container.java:1396)
              at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3173)
              at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:3012)
              at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:2936)
              at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2839)
              at java.awt.Container.dispatchEventImpl(Container.java:1335)
              at java.awt.Window.dispatchEventImpl(Window.java:1338)
              at java.awt.Component.dispatchEvent(Component.java:3327)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:437)
              at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:140)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:126)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:121)
              at java.awt.Dialog.show(Dialog.java:466)
              at java.awt.Component.show(Component.java:1107)
              at java.awt.Component.setVisible(Component.java:1064)
              at test.TreeTest$1.actionPerformed(TreeTest.java:29)
              at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1639)
              at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1692)
              at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:412)
              at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:251)
              at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:261)
              at java.awt.Component.processMouseEvent(Component.java:4862)
              at java.awt.Component.processEvent(Component.java:4688)
              at java.awt.Container.processEvent(Container.java:1299)
              at java.awt.Component.dispatchEventImpl(Component.java:3460)
              at java.awt.Container.dispatchEventImpl(Container.java:1361)
              at java.awt.Component.dispatchEvent(Component.java:3327)
              at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3175)
              at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2887)
              at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2845)
              at java.awt.Container.dispatchEventImpl(Container.java:1335)
              at java.awt.Window.dispatchEventImpl(Window.java:1338)
              at java.awt.Component.dispatchEvent(Component.java:3327)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:437)
              at java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:140)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:126)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:121)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

      Danila.

            dassunw Das Das (Inactive)
            bonealsunw Bret O'neal (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: