import java.io.*; import java.applet.*; public class Test extends Applet implements Runnable{ public void init(){ try{ Runtime.getRuntime().exec("notepad.exe"); }catch(IOException e){ } } }java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkExec(SecurityManager.java:774) at java.lang.Runtime.exec(Runtime.java:563) at java.lang.Runtime.exec(Runtime.java:428) at java.lang.Runtime.exec(Runtime.java:364) at java.lang.Runtime.exec(Runtime.java:326) at Test.init(Test.java:23) at sun.applet.AppletPanel.run(AppletPanel.java:353) at java.lang.Thread.run(Thread.java:534) java 安全机制不充许访问本地文件.
2。JNI 同样面临这个问题,只要是调用本地进程就不是那么简单的。如果用jni就需要先用c/c++来编写dll调用pb的exe然后java来掉用c/c++很麻烦。而且同样避不开上诉问题。
3。我的意见是用applet直接调用但是注意要经过客户端的安全允许。
import java.applet.*;
public class Test extends Applet implements Runnable{
public void init(){
try{
Runtime.getRuntime().exec("notepad.exe");
}catch(IOException e){
}
}
}java.security.AccessControlException: access denied (java.io.FilePermission <<ALL FILES>> execute)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
at java.lang.SecurityManager.checkExec(SecurityManager.java:774)
at java.lang.Runtime.exec(Runtime.java:563)
at java.lang.Runtime.exec(Runtime.java:428)
at java.lang.Runtime.exec(Runtime.java:364)
at java.lang.Runtime.exec(Runtime.java:326)
at Test.init(Test.java:23)
at sun.applet.AppletPanel.run(AppletPanel.java:353)
at java.lang.Thread.run(Thread.java:534)
java 安全机制不充许访问本地文件.
把你要调用程序的类通过java web start来调用,应该就没有那么多的安全问题了。
看来方案难寻了,参考了一下以前别的国际公司的解决办法,呵呵,规模比重做还要命,算了,结了吧,估计在这里是找不到答案了。