com4j包装器生成问题

4

我正在尝试使用tlbimp-20110320.jar为com4j生成包装器。我也尝试了一个2008版本,但出现了相同的错误。即使我尝试在教程示例中运行,仍然会出现相同的错误。

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)
3个回答

1

0

解压 tlbimp.jar 并查看其清单。它有一个类路径,其中 args4j 和 com4j 必须与 tlbimp.jar 在同一目录中,并需要特定的名称。名称的具体细节取决于构建过程,可能包括版本号,也可能不包括。按照指示命名您的 com4j 和 arg4j,然后就可以开始了。


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

好的。我下载了args4j-2.0.19.jar文件,将它放在/lib目录下,但是还是出现了相同的错误。然后我尝试放在同一个目录下,还是出现了相同的错误。 - user328898
好的。我想我已经让它有点工作了。我不得不将args4j jar内容复制到tlbimp jar中。然后我遇到了一个不同的错误,只能通过对com4j内容执行相同的操作来解决。它开始运行了一段时间,然后生成了一个NPE。 - user328898
1
自那时起有任何进展吗? - monksy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接