我编写了一个 Applet,我在其中使用 JNA 与设备进行通信。我需要获取设备读取的值并将其保存在数据库中。我给自己提出的解决方案是通过javascript调用Applet方法并将返回注入JSP中。嗯......在Applet的执行过程中,我需要下载一个DLL文件(在Windows上运行的ps),将其保存在磁盘上并将下载它的路径添加到JNA路径中。但是,当我运行 Applet 时,它会抛出 java.security.AccessControlException,说“访问被拒绝”。这是JSP代码...
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>..:: Testing ::..</title>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script>
$(document).ready(function() {
$('#myTrigger').click(function() {
alert($('#myApplet')[0].capture());
});
});
</script>
</head>
<body>
<h1>Test Applet</h1>
<object type="application/x-java-applet" height="0" width="0" id="myApplet">
<param name="code" value="AppletHW" />
<param name="archive" value="AppletHW.jar,jna.jar" />
</object>
<a id="myTrigger" href="#">Click here</a>
</body>
</html>
...我的小程序看起来像这样...
public class AppletHW extends Applet {
public String capture() {
String folder = System.getProperty("java.io.tmpdir");
File path = new File(folder + File.separator + ".applethw");
System.setProperty("jna.library.path", path.getAbsolutePath());[/code]
// I download the DLL file
MyDLL lib = (MyDLL) Native.loadLibrary("MyDLL", MyDLL.class);
return lib.capture();
}
}
PS 我的小程序 jar 和 JNA 都已签名。