2

jacobライブラリ(32ビットと64ビットの両方で実行)を使用してWordファイルを作成/開くJavaWebアプリケーションがあります。それは私のマシン(32ビット)で正しく実行されます。つまり、ワードアプリケーションが起動され、ワー​​ドファイルが開かれます。Javaプロジェクトがサーバーマシン(64ビット)にロードされると問題が発生します。Wordアプリケーションは起動されますが(タスクマネージャーウィンドウに「WINWORD.EXE * 32」と表示されます)、ファイルは開かれません。

何が欠けているのかわかりません。

あなたは私を助けることができます?前もって感謝します。

4

1 に答える 1

2

次のいずれかが起こっていると強く疑われます。

  1. セキュリティ違反
  2. 満たされていないリンク エラー
  3. Word がサーバーにインストールされていません
  4. その他のクラスローダ エラー ( edit )

シンプルな jsp で試し、try-catch ブロック内で LibraryLoader を直接呼び出しました。

 try {
   LibraryLoader.loadJacobLibrary();
   ActiveXComponent oWord = new ActiveXComponent("Word.Application");
   oWord.setProperty("Visible", new Variant(true));
 } catch (Throwable th) {
   th.printStackTrace(new java.io.PrintWriter(out));
 }

静的デバッグ初期化子からのセキュリティ違反が原因で、JacobObject クラスの初期化に失敗しました: "true".equalsIgnoreCase(System.getProperty("com.jacob.debug"));。それを true への単純な割り当てに置き換え、それを jacob.jar に置き換えると、次のようになりました。java.lang.UnsatisfiedLinkError: no jacob-1.16-x64 in java.library.path

この時点で、物事は毛むくじゃらになります。おそらく、メソッドを置き換えた LibraryLoader コードを次のloadJacobLibraryようなものに置き換える必要があります。

public static void loadJacobLibrary() {
  System.load("C:/<path to .dll as known on the server>/" + getPreferredDLLName() + ".dll");
}

次に、Word.Application.

編集他のクラスローダー エラーの場合、根本的な問題は、サーバー内で.dll の 1 つのインスタンスしかロードできないことです。 dll を 1 回だけロードし、コードがすべてのサーブレットで確実に利用できるようにするために、Web アプリケーションのリロードによって妨げられないクラスローダーにコードをロードする必要があります。その場合、サーバー アプリケーションがリロードされるまで、.dll を使用できなくなります。

于 2012-04-13T16:22:32.633 に答える