无法在applet中使用swing UI - 调用公共方法

时间:2012-05-29 17:10:30

标签: java javascript swing applet japplet

我的问题如下:我在HTML页面中嵌入了JApplet,并使用app调用公共方法的JS调用form按钮:

<input id="btnAppletSelectFiles" type="button" value="Select Files" 
    onclick="document.appletExcelUploader.SelectFiles();" />

在我的JApplet中我有FileChooser,如:

public class ExcelUploader extends JApplet {

    private JFileChooser fc = new JFileChooser();
    // Some stuff
}

我在我的小程序中编写这样的代码&#39;公共方法:

  public void SelectFiles() {
        int retVal = fc.showOpenDialog(ControlsPanel.this);

        if (retVal == JFileChooser.APPROVE_OPTION) {
            for (File file : fc.getSelectedFiles()) {
                System.out.println(file.getName());
            }
        }
    }

所以单击HTML按钮时,文件对话框显示正常,我可以浏览目录并检查文件,但我不能按打开确定按钮 - 我点击但是对话仍然存在。

我认为线程有问题 - 我仍然以某种方式在&#34; HTML和JS&#34;线程,而不是我的小程序&#39; GUI线程或事件派发线程。

如何解决问题?

1 个答案:

答案 0 :(得分:1)

从JavaScript调用的受信任applet中的方法不再受信任,因为Java无法解释堆栈中的所有代码帧。要解决此问题,请使用AccessController.doPrivileged(..)重载方法之一。