4

我正在尝试使用 tlbimp-20110320.jar 为 com4j 生成包装器。我还尝试了具有相同错误的 2008 版本。即使我尝试针对 tut 中的示例运行,我也会遇到相同的错误。

C:\Users\matthew\Documents\NetBeansProjects\test>"C:\Program Files (x86)\Java\jr
e7\bin\java.exe" -jar tlbimp-20110320.jar -o excel -p excel "C:\Program Files (x
86)\Microsoft Office\Office14\EXCEL.EXE"
Exception in thread "main" java.lang.NoClassDefFoundError: org/kohsuke/args4j/Cm
dLineException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.Class.getMethod0(Unknown Source)
    at java.lang.Class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.kohsuke.args4j.CmdLineException

    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more

在 Iceman 提供了所需库的链接后,我能够让它运行一点。但是,我必须将 arg4j 内容复制到 tlbimp jar 中,并将 com4j 内容也复制到 tlbimp jar 中。现在我明白了

C:\Users\matthew\Documents\NetBeansProjects\test>"C:\Program Files (x86)\Java\jr
e7\bin\java.exe" -jar tlbimp-20110320.jar -o excel -p excel "C:\Program Files (x
86)\Microsoft Office\Office14\EXCEL.EXE"
Generating definitions from Excel
A referenced type library "Office" is generated into the same package "excel"
Unable to handle the type SAVEARRAY(Variant)*
  method ConnectData
  interface IRtdServer
A referenced type library "VBIDE" is generated into the same package "excel"
Exception in thread "main" java.lang.NullPointerException
    at com4j.tlbimp.driver.Driver$1.resolve(Driver.java:64)
    at com4j.tlbimp.Generator$LibBinder.<init>(Generator.java:382)
    at com4j.tlbimp.Generator.getTypeLibInfo(Generator.java:686)
    at com4j.tlbimp.Generator.getTypeName(Generator.java:663)
    at com4j.tlbimp.TypeBinding.bind(TypeBinding.java:173)
    at com4j.tlbimp.MethodBinder.declareReturnType(MethodBinder.java:542)
    at com4j.tlbimp.MethodBinder.declareWithDefaults(MethodBinder.java:399)
    at com4j.tlbimp.MethodBinder.declare(MethodBinder.java:118)
    at com4j.tlbimp.InvocableInterfaceGenerator.generateMethod(InvocableInte
rfaceGenerator.java:39)
    at com4j.tlbimp.InterfaceGenerator.generate(InterfaceGenerator.java:94)
    at com4j.tlbimp.Generator$LibBinder.generate(Generator.java:491)
    at com4j.tlbimp.Generator.generate(Generator.java:112)
    at com4j.tlbimp.driver.Driver.run(Driver.java:107)
    at com4j.tlbimp.driver.Main.doMain(Main.java:132)
    at com4j.tlbimp.driver.Main.main(Main.java:56)
4

3 回答 3

1

需要tlbimp-20110320.jar args4j-2.0.1.jarcom4j-20110320.jar
注意: com4j-20110320.jar,需要改名为com4j.jar

附加信息

最新版本的 tlbimp ( tlbimp-2.1.jar ),需要args4j-2.0.8.jarcom4j-2.1.jar
在此版本中,不需要更改文件名。

于 2016-03-29T16:46:57.527 回答
0

从堆栈跟踪来看,您似乎缺少 java 类路径中的依赖 jar。该程序似乎正在寻找 Koshuke 的 args4j 库 - http://args4j.kohsuke.org/

于 2012-03-03T06:32:07.823 回答
0

解压 tlbimp.jar 并查看其清单。它有一个类路径,其中 args4j 和 com4j 必须与 tlbimp.jar 位于同一目录中,并且需要特定名称。名称的细节取决于构建,可能包含也可能不包含版本号。按照指示命名您的 com4j 和 arg4j ,一切顺利。

于 2016-10-03T20:44:40.797 回答