2015-10-05 103 views
0

我正在运行一个Python项目,但是有一个库(sikuli)加载起来更容易在Java中使用。我想知道是否有某种方法可以授予我的python程序访问Java类的权限,并以某种方式让JVM解释从Python对Java类的调用。在Python项目中运行Java类

另一种方法是让我所有的方法.jar,然后只需运行与Python中的.subprocess命令,这是一个有点混乱,但也将完成这项工作参数的罐子。

+0

我不认为jar选项是'凌乱'。阅读本文:http://baojie.org/blog/2014/06/16/call-java-from-python/ – alfasin

+4

[从Python调用Java]的可能重复(http://stackoverflow.com/questions/3652554/调用-java-from-python) – alfasin

回答

2

看看Pyjnius。它允许您将Java类作为Python对象导入,并以透明的pythonic方式公开其方法。

基本例如:在一个JAR文件

java_resource_jar_path = "/path/to/jar/directory" 
jnius_config.set_classpath(java_resource_jar_path) 

from jnius import autoclass 
# from jnius import JavaException 
# You might have to import JavaException if your class happens to throw exceptions 

TheJavaClass = autoclass(path.in.the.jar.file.to.class) # No ".class", no parentheses 
python_instance_of_the_Java_class = TheJavaClass() 

此时使用的一类,python_instance_of_the_Java_class具有Java类的所有方法。

+0

谢谢,我来看看。在独立的java类中,我将如何担心导入sikuli-java.jar?在java中,我将它添加到项目库中,但是如何在python通过pyjnius引用的独立.java文件中执行此操作? – k9b

+0

@ k9b我添加了一个示例,向您展示如何使用JAR文件。 – HugoMailhot

+0

非常感谢。意义非凡! – k9b

0

Jpype1允许您在类路径中使用自定义JAR启动JVM,允许您通过Python虚拟使用任何第三方Java库。

import jpype 

jpype.startJVM(jpype.getDefaultJVMPath(), '-ae', "-Djava.class.path=./MyLibrary.jar") 
pkg = jpype.JPackage('com').site.myclasses 
javaobj = pkg.MyClass() 
javaobj.javaMethod()