0

Web サイトの Internet Explorer からアップロードするために使用している Java アプレットがあります。私のサイトでボタンが押されると、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);
      }  

 }

このコードは機能しますが、filechooser dilog が開くのが非常に遅くなりますが、1 分間は完全に応答しなくなり、その後非常に遅くなります。

4

1 に答える 1

1

この記事を読んだとき、私は自分が経験した恐ろしい経験を想像することができました. 私はあなたのソフトウェアよりもはるかに複雑なソフトウェアで作業する必要がありましたが、本質的には同じ原則を持っていました: Web ブラウザーで実行されている Javascript と Java アプレットを相互作用させる。

私たちはいくつかの問題に直面しました。

  1. 反応が遅い: あなたが経験していることに似ています。
  2. セキュリティの問題: 潜在的に危険なコードやゼロデイ攻撃に関連するその他の問題に同意するようユーザーに求めるセキュリティ チェック。
  3. 動作しないJavascript 呼び出し: アプレットが JavaScript コードにアクセスできないことはめったにありません。この問題の原因が見つからず、再現が非常に困難でした。
  4. ブラウザの互換性: Firefox と Chrome は非常に標準的でしたが、Internet Explorer と Safari ではいくつかの問題に直面しました。

私たちのアプレット コードは 5 日で完成しましたが、javascript との統合には約 1 か月かかりました (4 人の上級開発者が作業していました)。それはただの悪夢でした!

要するに、私たちはそれをすることができませんでした。別の方法として、アプレット内にすべてを記述し、UI 開発者がアプレットの外観を変更するために使用できる一連のプロパティを提供しました。これはうまく機能し、誰もがそれに満足していました。

したがって、JavaScript + Java アプレットは使用しないことをお勧めします。はい、いくつかの基本的な機能を使用できますが、それ以上は使用しないでください。

よし、あなたの問題について話しましょう。Java メソッドを呼び出すときは javascript が非常に遅いが、Java プロパティを変更するときはまったく遅くない場合があることに気付きました。そこで、いくつかの Java 変数を作成し、Javascript で変更しました。次に、これらの変数を (おそらくスレッドで) 監視しました。最後に、これらの変数に基づいて適切なメソッドを呼び出すことができます。

いいえ、私はこのアプローチが好きではありません。しかし、Java アプレットで Javascript を使用するという考えを完全に放棄する前に、私たちにとってうまくいった唯一のことでした。

お役に立てば幸いです。

乾杯、

于 2013-07-07T18:16:00.723 に答える