从已签名的java小程序中删除文件

从已签名的java小程序中删除文件,java,applet,sign,Java,Applet,Sign,当用户注销应用程序时,我必须从用户系统中删除一些临时文件。该应用程序具有小程序。小程序jar已签名。我按照这个策略调用applet的destroy方法来删除文件。我通过javascript调用applet的destroy方法 比如document.myApplet.destroy()。调用此命令后,我在浏览器上得到的错误如下 未捕获错误:java.security.AccessControlException:访问被拒绝(java.io.FilePermission Uncaught Error

当用户注销应用程序时,我必须从用户系统中删除一些临时文件。该应用程序具有小程序。小程序jar已签名。我按照这个策略调用applet的destroy方法来删除文件。我通过javascript调用applet的destroy方法 比如document.myApplet.destroy()。调用此命令后,我在浏览器上得到的错误如下


未捕获错误:java.security.AccessControlException:访问被拒绝(java.io.FilePermission Uncaught Error:在NPObject上调用方法时出错。

您应该从javascript代码中删除对
destroy
方法的调用。当用户离开页面时,浏览器会自动调用destroy方法。发生这种情况的原因可能是您的
destroy
方法不是公共的。但是,这不会阻止浏览器调用它。

您应该从javascript代码中删除对
destroy
方法的调用。当用户离开页面时,浏览器会自动调用destroy方法。发生这种情况的原因可能是因为您的
destroy
方法不可用blic。但是,这并不能阻止浏览器调用它。

好的,我自己得到了答案:在参考了这个链接后,我发现,通过将它们包装在AccessController.doPrivileged方法中,可以进行读取、写入甚至删除

AccessController.doPrivileged(new PrivilegedAction() {

                @Override
                public Object run() {
                    try {
                        deleteAppCacheDirectory();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

            });

好的,我自己得到了答案:在参考了这个链接后,我发现,通过将它们包装在AccessController.doPrivileged方法中,可以完成读取、写入甚至删除

AccessController.doPrivileged(new PrivilegedAction() {

                @Override
                public Object run() {
                    try {
                        deleteAppCacheDirectory();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

            });

我认为您的destroy方法是私有的或其他什么。不,我的destory方法不是私有的,我发现当用户注销时它没有被chrome调用!但它是用于其他浏览器的?请参阅我的代码:public void destroy(){String tempFolder=System.getProperty(“java.io.tmpdir”);String cacheFolder=tempFolder+“/AppCache”;File File=new File(cacheFolder);if(File.exists()&&File.isDirectory()){deleteDirectory(cacheFolder);}你的代码是完美的,只要
deleteDirectory
做它应该做的事情。我认为你的销毁方法是私有的或其他什么。不,我的销毁方法不是私有的,我发现当用户注销时,它不会被chrome调用!但它是用于其他浏览器的?请参阅我的代码:public void destroy(){String tempFolder=System.getProperty(“java.io.tmpdir”);String cacheFolder=tempFolder+“/AppCache”;File File=new File(cacheFolder);if(File.exists()&&File.isDirectory()){deleteDirectory(cacheFolder);}}只要
deleteDirectory
做它应该做的事,你的代码是无瑕的。