0

我有一个 java 小程序,用于从我的网站中的 Internet Explorer 上传。当在我的网站上按下按钮时,一个 javascript 函数会启动小程序并调用小程序的 OpenPrivDialog() 函数。

  public void  OpenPrivDialog() {

     AccessController.doPrivileged(new PrivilegedAction<Object>() {
        @Override
        public Object run() {
            OpenDialog();
             return true;
        }

     });
 }

 public void OpenDialog(){    

     JFileChooser fc = new JFileChooser();

      fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
      fc.setMultiSelectionEnabled(true);
      Logger.getLogger(UploadApplet.class.getName()).log(Level.INFO, "Opening dialog", "fe");
      int retVal = fc.showOpenDialog(f);
      if (retVal == JFileChooser.APPROVE_OPTION) {
          Logger.getLogger(UploadApplet.class.getName()).log(Level.INFO, "approved", "");
           File[] files = fc.getSelectedFiles();
           Logger.getLogger(UploadApplet.class.getName()).log(Level.INFO, "got " + files.length+" files", "");
           AddFiles(files);
      }  

 }

此代码有效,但文件选择器对话框打开速度非常慢,但有一分钟完全没有响应,然后非常慢 - 知道为什么吗?

4

1 回答 1

1

当我读到这篇文章时,我可以想象我所经历的可怕经历。我需要使用比您的软件复杂得多的软件,但本质上它具有相同的原理:将 Java Applet 与在 Web 浏览器上运行的 Javascript 交互。

我们面临几个问题,我要强调:

  1. 反应慢:与您所经历的类似。
  2. 安全问题:安全检查要求用户同意潜在危险代码和其他与零日攻击相关的问题。
  3. Javascript 调用无效:我们的小程序很少无法访问 javascript 代码,我们从未找到此问题的原因,并且很难重现。
  4. 浏览器兼容性:Firefox 和 Chrome 非常标准,但我们在 Internet Explorer 和 Safari 上遇到了一些问题。

事实证明,我们的小程序代码在 5 天内就准备好了,但与 javascript 的集成却花了大约一个月的时间(我们有 4 名高级开发人员在工作),因为我们的利益相关者希望它与一些花哨的 jQuery 组件一起工作。这简直是​​一场噩梦

归根结底,我们做不到。或者,我们在小程序中编写了所有内容,并提供了一系列属性,UI 开发人员可以使用这些属性来更改小程序的外观,效果很好,每个人都对此感到满意。

因此,我建议不要使用 JavaScript + Java Applets。是的,您可以使用一些基本功能,但不要进一步使用它。

好吧,让我们谈谈你的问题。我们注意到在某些情况下,javascript 在调用 Java 方法时非常慢,但在更改 Java 属性时却从未变慢。因此,我们创建了一些 Java 变量并通过 Javascript 对其进行了更改。接下来,我们观察了这些变量(可能在一个线程中)。最后,我们可以根据这些变量调用正确的方法。

不,我不喜欢这种方法。但在完全放弃将 Javascript 与 Java Applets 一起使用的想法之前,这是唯一对我们有用的东西。

我希望它有所帮助。

干杯,

于 2013-07-07T18:16:00.723 回答