我使用下面的代码来获取指针位置,但 Windows 10 在我运行应用程序时阻止访问。
while (true) {
//Thread.sleep(100);
try {
System.out.println("(" + MouseInfo.getPointerInfo().getLocation().x
+ ", "
+ MouseInfo.getPointerInfo().getLocation().y + ")");
} catch (Exception e) {
e.printStackTrace();
}
错误:
通知面板中会弹出一条通知:
Unauthorized Changes blocked Controlled folder access blocked netbeans64.exe from making changes.
在访问指针位置之前它工作正常。 e.printstacktrace()
没有抛出异常。我该怎么办?
更新
如果我从 Defender 设置中允许它,我就可以访问指针位置。如何从 Java 启用它?它将导致每个使用该应用程序的人从 Defender 设置中允许它,这似乎不太安静。有什么想法吗?
最佳答案
我曾经遇到过这个问题。事实证明,Windows 上的某些文件夹被视为特殊文件夹,当应用程序以某种方式对其进行修改时,会引发此警报。用户的 Documents
文件夹就是这些文件夹之一(图片、下载和 C:\Windows
等也可能是)。从您的屏幕截图中我们看到您的应用程序项目在 %userprofile%/Documents/NetBeansProject...
目录中运行。如果您通过某些构建系统/IDE 运行应用程序,它可能会创建一些临时文件。这被 Defender 捕获并阻止。
只需尝试...将项目移出 Documents
文件夹。 (当我遇到这个问题时,它对我有用)。
如果它不起作用,那么它可能与 java SecurityManager
相关,并且 MouseInfo
可能以某种方式触发 SecurityException
或他们在 documentation 中编写的其他机制。
无论如何,如果有帮助,请提供信息。
关于java - Windows Defender 阻止在 Java 中获取指针位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60627528/