NoSuchMethodError:com.jacob.activeX.ActiveXComponent.getObject()

fenghualin 2009-09-07 01:17:51
已经把jacob.dll文件放到了系统文件system32下面,在web工程的lib目录下面也有jacob.jar包,tomcat6.0的bin目录下面也有jacob.dll文件,但是运行的时候会出现如下错误:
java.lang.NoSuchMethodError: com.jacob.activeX.ActiveXComponent.getObject()Lcom/jacob/com/Dispatch;

求高手指点,急!!!

个人分太少,给10分表示下心意
...全文
540 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
JerrySong 2012-08-27
  • 打赏
  • 举报
回复
哈哈,找了一小天了真是不容易找到了,我按你的方法解决了。感谢楼主
fenghualin 2009-12-07
  • 打赏
  • 举报
回复
这个问题放了一段时间,今天整理下解决了。
getObject()方法报错,还是jacob包可能不匹配,或许位置没有放正确。
我的解决步骤:
1、csdn上下载的jacob包,包括一个jacob-1.14.3-x86.dll文件和一个jacob.jar文件
2、把jacob-1.14.3-x86.dll放入 Java\jdk1.5.0_06\jre\bin目录下.
把jacob.jar放入 Java\jdk1.5.0_0\jre\lib\ext
我把system32下面的jacob.jar删除了,只在上面两个目录下放了相应的文件(工程的lib目录下的jacob.jar貌似可以可无)
3、重新启动tomcat服务器

这里是实现了一个打印word的功能:主要代码如下:
public void getPrint(String licenseNos, String currentUser) {
String[] licenseNoArray = licenseNos.split(",");
List<LimsMeasCertificate> lmcLst = hibernateTemplateDAO.createCriteria(LimsMeasCertificate.class, Restrictions.in("licenseNo", licenseNoArray)).list();
List<LimsAnnex> laLst = null;
String fileName = null;
//word运行程序对象
ActiveXComponent objWord = null;
Dispatch wordObject = null;
//所有word文档
Dispatch documents = null;
Dispatch document = null;
String filePath = CertificateConstants.UPLODE_FILE_SAVE_PATH;
for (LimsMeasCertificate lmc : lmcLst) {
laLst = hibernateTemplateDAO.createCriteria(LimsAnnex.class, Restrictions.and(Restrictions.eq("businessObject", "LimsMeasCertificate"), Restrictions.eq("businessObjectUniqueId", lmc.getLicenseNo()))).list();
try {
//初始化com线程,重要!!
ComThread.InitSTA();
// Instantiate objWord
objWord = new ActiveXComponent("Word.Application");
for (LimsAnnex la : laLst) {
fileName = la.getAnnexName();
// Assign a local word object
wordObject = (Dispatch) objWord.getObject();
// Create a Dispatch Parameter to hide the document that is opened
Dispatch.put(wordObject, "Visible", new Variant(false));
// Instantiate the Documents Property
documents = objWord.getProperty("Documents").toDispatch();
// Open a word document, Current Active Document
document = Dispatch.call(documents, "Open", filePath+fileName).toDispatch();
Dispatch.call(document, "PrintOut");
}
}catch(Exception e){
e.printStackTrace();
}finally {
ComThread.Release();
}
lmc.setStatus(Constants.PRINT_ED_JUGE);
lmc.setPrintUser(currentUser);
lmc.setPrintDate(getCurrentDateTime());
}
}
fenghualin 2009-09-16
  • 打赏
  • 举报
回复
怎么没有人帮我回答呢?
今天做项目,用到了el表达式和jstl,在tomcat6.0上跑得好好的,没想到copy到tomcat5.5后,服务器起不来了,是tomcat版本的问题。查阅了不少资料,现在总结如下: 错误信息: java.lang.NoClassDefFoundError: javax/el/ExpressionFactory 分析:少包,上网查阅后发现解决方法 解决方法:将javaee.jar包再copy一份放在tomcat目录的common\lib下 如上完成后即解决了该异常,大以为大功告成,没想到又出现了新异常 错误信息:java.lang.NoSuchMethodError: javax.servlet.JSP.PageContext.getELContext()LJAVAx/el/ELContext 分析:这个问题网上找了半天没看到解决方法,只好自己想办法。想起先前看到的一个知识点:tomcat 6 实现了 servlet 2.5 和JSP2.1的规范相应的 tomcat 5 实现的是 2.4和2.0,想到tomcat5不支持JSTL1.2,于是替换JSTL1.1的包试试看后,问题解决 解决方法:移出工程lib目录中的JSTL1.2.jar,添加standard-1.1.jar和JSTL1.1.jar 总结: jstl1.1版本由2个必要包构成:standard-1.1.jar和JSTL1.1.jar;而jstl1.1版本只有一个必要包JSTL1.2.jar。(一开始在替换的过程中想当然的用JSTL1.1.jar换JSTL1.2.jar,然后遗漏了standard-1.1.jar,耽搁了不少时间。) 经测试,tomcat6.0支持JSTL1.2版本,也支持JSTL1.1版本;tomcat5.5只支持JSTL1.1(JSTL1.1一下版本未测试) 不建议将2个版本的3个包同时放在工程中,可能会发生版本冲突。(另外,实际操作的时候发现JSTL1.2.jar和JSTL1.1.jar这2个包放一起可以在tomcat5.5和tomcat6.0上跑,鉴于JSTL1.1.jar里面没有c.tld等文件,猜测JSTL1.1.jar里面只是放置了1.1的专用的类和信息)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧