Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以从java调用python方法吗?_Java_Python - Fatal编程技术网

我们可以从java调用python方法吗?

我们可以从java调用python方法吗?,java,python,Java,Python,我知道jython允许我们从任何java的类文件调用java方法,就好像它们是为python编写的一样,但是反过来可能吗 我已经有很多用python编写的算法,它们与python和jython配合得很好,但是它们缺少一个合适的GUI。我计划将GUI与java一起带来,并保持python库完好无损。我不能用jython或python编写一个好的GUI,也不能用python编写一个好的算法。所以我找到的解决方案是合并java的GUI和python的库。这可能吗。我可以从java调用python库吗

我知道jython允许我们从任何java的类文件调用java方法,就好像它们是为python编写的一样,但是反过来可能吗

我已经有很多用python编写的算法,它们与python和jython配合得很好,但是它们缺少一个合适的GUI。我计划将GUI与java一起带来,并保持python库完好无损。我不能用jython或python编写一个好的GUI,也不能用python编写一个好的算法。所以我找到的解决方案是合并java的GUI和python的库。这可能吗。我可以从java调用python库吗

您可以使用Jython从Java代码轻松调用python函数。只要python代码本身在jython下运行,即不使用一些不受支持的c扩展

如果这对你有效,那肯定是你能得到的最简单的解决方案。否则,您可以从新的Java6解释器支持中使用org.python.util.PythonInterpreter

一个简单的例子来自我的头顶——但我希望它能起作用:(为了简洁起见,没有进行错误检查)


是的,可以这样做。通常,这将通过创建一个
PythonInterpreter
对象,然后使用该对象调用python类来完成

考虑以下示例:

Java:

import org.python.core.PyInstance;  
import org.python.util.PythonInterpreter;  


public class InterpreterExample  
{  

   PythonInterpreter interpreter = null;  


   public InterpreterExample()  
   {  
      PythonInterpreter.initialize(System.getProperties(),  
                                   System.getProperties(), new String[0]);  

      this.interpreter = new PythonInterpreter();  
   }  

   void execfile( final String fileName )  
   {  
      this.interpreter.execfile(fileName);  
   }  

   PyInstance createClass( final String className, final String opts )  
   {  
      return (PyInstance) this.interpreter.eval(className + "(" + opts + ")");  
   }  

   public static void main( String gargs[] )  
   {  
      InterpreterExample ie = new InterpreterExample();  

      ie.execfile("hello.py");  

      PyInstance hello = ie.createClass("Hello", "None");  

      hello.invoke("run");  
   }  
} 
Python:

class Hello:  
    __gui = None  

    def __init__(self, gui):  
        self.__gui = gui  

    def run(self):  
        print 'Hello world!'

不一样不,更重要的是,没有理由这么做。答案适合你的需要吗?如果他们解决了您的问题,请选择一个答案,这样问题就不会再被标记为未回答。谢谢
class Hello:  
    __gui = None  

    def __init__(self, gui):  
        self.__gui = gui  

    def run(self):  
        print 'Hello world!'