Прежде всего, я проверил ваш код на своем собственном jarfile.На самом деле, мне была выдана такая ошибка:
TypeError: Package clip.frontend.Start.main is not Callable
Затем, внимательно прочитав документы, я воспользовался другим методом.
import jpype
# I've used other set of parameters to JVM, and modified a bit your classpath setting.
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=clip.jar")
# Second difference, I decided to use JClass because it was more clear for me.
# Parameter array was kept empty.
jpype.JClass("clip.frontend.Start").main([])
jpype.shutdownJVM()
И вывод был правильным:
% python2 main.py
2 2
+>+[<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>+<<<<<<<<<[-]>[-]>>>>>>>>[<<<<<<<<+>+>>>>>>>-]
<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>[-]<<<<<<]<<<[>>+>+<<<-]>>[<<+>>-]>[[-]>>>>>>++
[<<<<<+>>>>>>>>>>>>+<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>[>>]+<<[<<]>[>[>>]
<+<[<<]>-]<<<<<<<[-]++[<<<<<+>>>>>>>>>>>>+<<<<<<<-]<<<<<[>>>>>+<<<<<-]>>>>>>>>>>>>>
[>>]+<<[<<]>[>[>>]<+<[<<]>-]<<<<<<<[-]#JVM has been shutdown
Теперь я решил перевести свое решение в соответствии с вашей проблемой:
import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=astral.jar")
jpype.JClass("phylonet.coalescent.CommandLine").main([])
jpype.shutdownJVM()
И код работает правильно.Более важным, чем фактическое решение является тот факт, почему ваш код не работает.Вы использовали неправильный набор параметров и указали путь к классу в прочем способе.
Заменив JClass на JPackage, код все еще работает.
import jpype
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=astral.jar")
jpype.JPackage('phylonet').coalescent.CommandLine.main([])
jpype.shutdownJVM()
Поскольку вы извлекаете классы из classpath правильно, единственно возможная причина - указание неверного набора параметров.После удаления -ea
код все еще работает, поэтому допущенная вами ошибка заключается в этом фрагменте кода.
'-Djava.class.path="%s"' % jar
И фактически, я использовал это в противоположность своему ответу и bam-кодувыдает это:
TypeError: Package phylonet.coalescent.CommandLine.main is not Callable
Это означает, что параметр содержал следующее:
-Djava.class.path="astral.jar"
вместо следующих
-Djava.class.path=astral.jar
Кавычки были неуместны и вызывали ошибку врезультат.