我在尝试运行我的 GWT 应用程序时遇到此运行时错误:
java.security.AccessControlException: access denied (java.io.FilePermission C:\Users\Admin\AppData\Local\Temp\tmp-andami read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
(堆栈跟踪较长,但我想这足以聚焦问题源)
我在 Google 中搜索过这个问题,一般来说,我发现更改 java.policy 文件(位于 C:\Program Files\Java\jre6\lib\security),所以我做了类似的事情:
permission java.io.FilePermission "<<ALL FILES>>" , "read";
permission java.io.FilePermission "C:\Users\Admin\AppData\Local\Temp\tmp-andami" , "read";
permission java.security.AllPermission;
问题是在那个 PATH 文件或文件夹中“tmp-andami”不存在(也许它是隐藏的),所以我不知道是权限问题还是这个文件不存在的问题,因此无法读取。
所有这些都来 self 代码中写的一行:
private static final String tempDirectoryPath =
System.getProperty("java.io.tmpdir")+"/tmp-andami";
但是我需要在此处或在另一个 PATH 中编写此文件,我不在乎。我试着把文件写在“C:/”下,但我得到了同样的结果。
关于这个问题有什么想法吗?我做错了什么吗?
非常感谢!
但我使用的是从“服务器”包端访问我的文件系统,而不是包含可翻译代码的“客户端”。
我认为这样做是可能的。
那么,我能做什么呢?它应该存在一种访问本地文件系统的方法,不是吗?或者至少是一种替代方法。
然后,将此文件放在本地部署的应用程序文件系统下怎么样?我的意思是,在“ war ”目录或类似的目录下。如果浏览器可以访问这个文件夹来读取 .jars 等等,是否可以做同样的事情但有另一个目的?
感谢您的帮助!
最佳答案
GWT 将您的代码编译成在浏览器中运行的 JavaScript。 JavaScript 无法访问您的文件系统(有充分的理由)。
java.io.FilePermission
未在 JRE Emulation Reference 中列出所以你不能在你的客户端代码中使用它,所以它甚至不能用 GWT 编译。
关于java - 在我的 GWT 应用程序运行时 (java.io.FilePermission) 上没有对文件的读/写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4340570/