我试图打开一个jar文件并执行它的主函数,但是jpype抛出了一个对我来说没有意义的错误。这是我的代码:
jpype.startJVM(jpype.getDefaultJVMPath(), '-Djava.class.path="%s"' % jar)
CommandLine = jpype.JPackage('phylonet').coalescent.CommandLine
CommandLine.main(['-i', input_file, '-o', output_file])
jpype.shutdownJVM()
我得到这个错误: 类型错误:包phylonet.coalinent.CommandLine.main不可调用
我提供了jar文件的绝对路径,并从META-INF中获得了main函数/清单.MF公司名称:
^{pr2}$我试图打开的jar文件名为astral,从这里开始:https://github.com/smirarab/ASTRAL
像这样称呼它就像预期的那样工作:
java -Djava.class.path="./astral.jar"
所以当我用jpype调用它时为什么不呢?在
这是JPype的经典问题。如果无法加载jar,那么JPackage将返回另一个不可调用的JPackage。导致装载失败的常见原因包括
{1>在加载之前的解决方案}上打印。0.7.0版本(目前作为候选版本提供)已经解决了这个问题。在
另外,建议您在导入类时使用},而不是{}。它更安全,因为它会报告一个更有意义的错误。例如:
jpype.imports
或{您可以将一个包标记为一致(类从上面开始,包从下面开始)以强制错误。在
首先,我在自己的jarfile上测试了您的代码。事实上,我被提出了这样的错误:
然后,在仔细阅读了文档之后,我使用了另一种方法。在
^{pr2}$输出是正确的:
现在,我决定翻译我的解决方案来匹配您的问题:
代码也能正常工作。比实际解决方案更重要的是,为什么您的代码不能工作。您使用了错误的参数集,并以其他方式指定了类路径。在
用JPackage替换JClass,代码仍然有效。在
由于从类路径中提取类的方法是正确的,唯一可能的原因是指定了无效的参数集。删除
-ea
后,代码仍然可以工作,所以您犯的错误就在这段代码中。在事实上,我用这个来反对我的答案,砰,代码产生了这样的结果:
这意味着,包含以下参数:
而不是跟随
引号放错地方了,结果引起了错误。在
相关问题 更多 >
编程相关推荐