在JRE1.4.2以上的版本中,你会发现,即使你已经信任了一个Applet的签名,使用JavaScript调用其方法时,仍然可能会遇到权限不足的问题。这让人头疼,不是吗?别急,今天就来聊聊这个问题,让我们一起找到解决办法。
问题分析
为什么会出现这种情况呢?其实,当你用JavaScript调用Applet方法时,Java的安全机制会限制这种跨线程的操作。简单来说,就是JavaScript线程和Applet线程不是同一线程,所以JavaScript线程没有权限直接调用Applet的方法。
解决方案
那怎么办呢?我们可以通过创建一个新的线程来解决权限问题。这个线程由Applet启动,拥有足够的权限。然后,JavaScript方法可以通过这个线程来间接调用Applet的方法。
public class MyApplet extends Applet {
Thread thread;
String command;
Object result;
boolean isEnd = false;
public void start() {
thread = new Thread(new Runnable() {
public void run() {
while (!isEnd) {
try {
synchronized (thread) {
thread.wait();
}
} catch (Exception e) {
e.printStackTrace();
}
if (isEnd) return;
try {
if (
