<p>首先,我在自己的jarfile上测试了您的代码。事实上,我被提出了这样的错误:</p>
<pre class="lang-py prettyprint-override"><code>TypeError: Package clip.frontend.Start.main is not Callable
</code></pre>
<p>然后,在仔细阅读了文档之后,我使用了另一种方法。在</p>
^{pr2}$
<p>输出是正确的:</p>
<pre><code>% python2 main.py
2 2
+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]
<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++
[<<<<<+>>>>>>>>>>>>+<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>[>>]+<<[<<]>[>[>>]
<+<[<<]>-]<<<<<<<[-]++[<<<<<+>>>>>>>>>>>>+<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>
[>>]+<<[<<]>[>[>>]<+<[<<]>-]<<<<<<<[-]#JVM has been shutdown
</code></pre>
<p>现在,我决定翻译我的解决方案来匹配您的问题:</p>
<pre class="lang-py prettyprint-override"><code>import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=astral.jar")
jpype.JClass("phylonet.coalescent.CommandLine").main([])
jpype.shutdownJVM()
</code></pre>
<p>代码也能正常工作。比实际解决方案更重要的是,为什么您的代码不能工作。您使用了错误的参数集,并以<strong><em>其他</em>方式指定了类路径。在</p>
<p>用JPackage替换JClass,代码仍然有效。在</p>
<pre class="lang-py prettyprint-override"><code>import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=astral.jar")
jpype.JPackage('phylonet').coalescent.CommandLine.main([])
jpype.shutdownJVM()
</code></pre>
<p>由于从类路径中提取类的方法是正确的,唯一可能的原因是指定了无效的参数集。删除<code>-ea</code>后,代码仍然可以工作,所以您犯的错误就在这段代码中。在</p>
<pre class="lang-py prettyprint-override"><code>'-Djava.class.path="%s"' % jar
</code></pre>
<p>事实上,我用这个来反对我的答案,砰,代码产生了这样的结果:</p>
<pre class="lang-py prettyprint-override"><code>TypeError: Package phylonet.coalescent.CommandLine.main is not Callable
</code></pre>
<p>这意味着,包含以下参数:</p>
<pre><code>-Djava.class.path="astral.jar"
</code></pre>
<p>而不是跟随</p>
<pre><code>-Djava.class.path=astral.jar
</code></pre>
<p>引号放错地方了,结果引起了错误。在</p>