已经把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分表示下心意

解决方案 »

  1.   

    这个问题放了一段时间,今天整理下解决了。
    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());
    }
    }