我在使用Java Applets中的MouseInfo
类时遇到了问题。
int somex = MouseInfo.getPointerInfo().getLocation().x;
int somey = MouseInfo.getPointerInfo().getLocation().y;`
上面的代码在普通的java程序中运行得很好,但是在applet中,我得到了一个
Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.awt.AWTPermission watchMousePointer)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
at java.security.AccessController.checkPermission(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.awt.MouseInfo.getPointerInfo(MouseInfo.java:62)
at Mousefollow.getCOOR(Mousefollow.java:208)
at Mousefollow.paint(Mousefollow.java:160)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
etc etc etc.
有谁知道为什么我不能在applet中使用该代码? 如何更改安全管理器以使其有效?
我问这个的原因是我有一个很好的小程序(游戏),除了我需要添加鼠标控件的事实。
如果有人建议如何调整上述代码,或者找到鼠标/键盘位置的完全不同的方式,我们将不胜感激。
它使用KeyListener
,MouseListener
,MouseMotionListener
,ActionListener
等相对有效,但MouseMotion
的问题是如果鼠标被关闭但是,它无法检测到鼠标的位置。
答案 0 :(得分:1)
小程序不是正常的应用程序。请参阅Java教程中的doc What Applets Can and Cannot Do。我建议你使用MouseMotionListener
在游戏中跟踪鼠标光标。
只需保存变量中的最后一个已知位置,以便在用户不移动鼠标时检测位置。
如果您希望applet的行为更像正确的应用程序,则需要对其进行签名:请参阅Java Tutorial上的Security in Rich Internet Applications 。