我有一個java web應用程序,它使用jacob庫(運行在32位和64位)創建/打開word文件。它正確運行在我的機器上(32位),這意味着應用程序一詞已啓動並且文件文件已打開。 在服務器計算機(64位)上加載java項目時出現問題:應用程序將啓動(我在任務管理器窗口中看到「WINWORD.EXE * 32」),但文件未打開。雅各 - Word文件正確打開在32位,而不是在64位
我不明白我錯過了什麼。
可以幫我嗎? 在此先感謝。
我有一個java web應用程序,它使用jacob庫(運行在32位和64位)創建/打開word文件。它正確運行在我的機器上(32位),這意味着應用程序一詞已啓動並且文件文件已打開。 在服務器計算機(64位)上加載java項目時出現問題:應用程序將啓動(我在任務管理器窗口中看到「WINWORD.EXE * 32」),但文件未打開。雅各 - Word文件正確打開在32位,而不是在64位
我不明白我錯過了什麼。
可以幫我嗎? 在此先感謝。
我強烈懷疑下列情況之一發生了:
我試着用一個簡單的jsp,並直接調用LibraryLoader一個try-catch塊:
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
這就是事情變得毛茸茸的。你可能不得不更換的東西,如更換方法loadJacobLibrary
的LibraryLoader代碼:
public static void loadJacobLibrary() {
System.load("C:/<path to .dll as known on the server>/" + getPreferredDLLName() + ".dll");
}
然後調用Word.Application
。
編輯對於一些其他的類加載器的錯誤,潛在的問題是,你只能加載.dll within the server的一個實例 - 這是指使用Tomcat,但問題是與所有其他的servlet容器類似 - 您只需要加載一次.dll,並且爲了確保代碼在所有servlet中都可用,需要將其加載到不會因重新加載Web應用程序而受到干擾的類加載器中。如果發生這種情況,那麼在服務器應用程序重新加載之前,您將無法使用.dll。
錯誤,警告,例外,代碼示例?我可以成功地將jacob庫與32位和64位虛擬機進行通信,並與32位COM對象(Word 2010 32位)進行通信。 – Petesh 2012-04-13 14:08:02
沒有錯誤,沒有警告,什麼都沒有。 – mrod 2012-04-13 14:32:39
沒有錯誤,沒有警告,什麼都沒有。我做的唯一的事情是:ActiveXComponent word = new ActiveXComponent(「Word.Application」); word.setProperty(「Visible」,new Variant(true));在一個jsp文件裏面。我還在頁面的頂部添加了com.jacob.com和com.jacob.activeX。在這一步我只想選擇過程開放,但我看到任何東西。 – mrod 2012-04-13 14:39:51