雅各 - 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