java真正高手来解答一下,很考技术
在我的Applet中有一个方法open(),在该方法中调用了SelectDir(),我从网页上的一个按钮调用open()时会出现异常。(如下) 请问原因是什么?怎样解决这个问题!
public int open()
{
dir = SelectDir();
if(!dir.equals("SelectDir Cancel")){return 1 ;}
else{return 0};
}
File loction = null;
public String SelectDir()
{
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
loction = null;
return "SelectDir Cancel";
}
else {
loction = fileChooser.getSelectedFile();
if(loction.isDirectory())
{
System.out.println("Dir name is :" + loction.toString());
}
return loction.toString() + "\\";
}
}
出现的异常报告:
java.security.PrivilegedActionException: java.lang.reflect.InvocationTargetException
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.plugin.liveconnect.SecureInvocation.CallMethod(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
at sun.plugin.liveconnect.PrivilegedCallMethodAction.run(Unknown Source)
... 4 more
Caused by: java.lang.ExceptionInInitializerError
at sun.awt.shell.Win32ShellFolder2$ComTask.execute(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.getFileSystemPath(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.composePathForCsidl(Unknown Source)
at sun.awt.shell.Win32ShellFolder2.<init>(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.getDesktop(Unknown Source)
at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
at sun.awt.shell.ShellFolder.get(Unknown Source)
at javax.swing.filechooser.FileSystemView.getRoots(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.updateUseShellFolder(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(Unknown Source)
at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown Source)
at javax.swing.plaf.metal.MetalFileChooserUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JFileChooser.updateUI(Unknown Source)
at javax.swing.JFileChooser.setup(Unknown Source)
at javax.swing.JFileChooser.<init>(Unknown Source)
at javax.swing.JFileChooser.<init>(Unknown Source)
at AppletTest.SelectDir(AppletTest.java:2678)
at AppletTest.StartToRecord(AppletTest.java:2590)
... 14 more
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission shutdownHooks)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.Runtime.addShutdownHook(Unknown Source)
at sun.awt.shell.Win32ShellFolder2$ComTaskExecutor.<init>(Unknown Source)
at sun.awt.shell.Win32ShellFolder2$ComTaskExecutor.<clinit>(Unknown Source)
... 33 more
[解决办法]
网上查了一下PrivilegedActionException这个异常是特权操作抛出的异常.感觉应该在jre\lib\security\java.policy文件里改动一下.具体怎么改我也不太清楚.
不过我现在做的项目是暂时改成以下形式[java.policy]
grant {
permission java.security.AllPermission;
};
[解决办法]
上面代码第五行写错了
其他的都能跑起来啊
[解决办法]
上面代码第五行写错了
else{return 0};改为else{return 0;}
[解决办法]
呵呵真不好发现
[解决办法]
谢谢大家,一楼,我的安全权限上已经有了你给的设置哈。
二楼,三楼,那个只是笔误哈,不是问题的原因
四楼,确实很麻烦
[解决办法]
晕了
[解决办法]
应该是applet的安全设置问题不允许你那些操作吧,给applet签下名应该就解决了
[解决办法]
最近也在搞applet的访问本地资源的权限问题,找了2天,刚好解决了,哈哈,便宜你小子啦
场景:test.jar:内含待签名的java小程序
结果:签名后,客户端能自动下载java小程序,且java小程序能访问客户端的任何资源
步骤:
(1) 将java小程序打包
jar cvf test.jar test.class
(2) 生成名为chinani.store的密钥库,别名为chinani
keytool -genkey -keystore chinani.store -alias chinani
密码:123456 (根据需要自己输入)
以下根据需要输入,最后确认:y
(3) 导出chinani.cer数字证书
keytool -export -keystore chinani.store -alias chinani -file chinani.cer
密码:123456 (根据需要自己输入)
(4) 对test.jar文件进行签名
jarsigner -keystore chinani.store test.jar chinani
密码:123456 (根据需要自己输入)
http://dev.csdn.net/article/23/23971.shtm
[解决办法]
System.getSecurityManager()
[解决办法]
Applet权限问题,给你个网站,自己看吧,里面那个Database Access by Applets(JDBC,Socket,,看你用的是哪个吧):
http://java.sun.com/developer/onlineTraining/Programming/BasicJava1/dba.html
[解决办法]
up
[解决办法]
搞applet搞么事阿,搞applet还不如搞flash
我从第一眼看到applet就不爽