当前位置: 首页 > 面试题库 >

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

严永丰
2023-03-14
问题内容

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

我已经有很多用python编写的算法,它们在python和jython上都可以很好地工作,但是它们缺少适当的GUI。我计划将GUI与Jav​​a一起使用,并保持python库完整。我无法使用jython或python编写良好的GUI,也无法使用python编写良好的算法。因此,我找到的解决方案是合并Java的GUI和python的库。这可能吗。我可以从Java调用python的库吗?


问题答案:

是的,可以做到。通常,这将通过创建一个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!'


 类似资料:
  • 本文向大家介绍我们可以在Java中使用此关键字调用方法吗?,包括了我们可以在Java中使用此关键字调用方法吗?的使用技巧和注意事项,需要的朋友参考一下 Java中的“ this”关键字在实例方法或构造函数中用作对当前对象的引用。是的,您可以使用它来调用方法。但是,您只能从实例方法(非静态)中调用它们。 示例 在下面的示例中,Student类具有一个私有变量名称,具有setter和getter方法,

  • 问题内容: 除了命令行以外,我可以调用Java方法吗? 问题答案: 如果您为JVM语言安装了REPL(Groovy可能需要最少的工作),则可以在REPL提示符下调用Java方法(Groovy的名称为groovysh)。具有一些奇怪的功能(我最不喜欢的一点是,用声明变量并没有达到您的预期),但是它仍然非常有用。Groovy不尊重隐私是一个有趣的功能,因此您可以调用私有方法并检查私有变量的内容。 Gr

  • 问题内容: 有人可以告诉我,如何在类级别调用方法吗? 假设我有一个如下所示的类,那么我们可以在类级别调用test1Method吗?如果不正确,请告诉我原因。 问题答案: 不,您不能在类下直接拥有方法调用语句或任何其他语句。根据JLS第8节-类的规定: 类的主体声明成员(字段和方法以及嵌套的类和接口),实例和静态初始化器以及构造函数(第8.1.6节)。 您必须在那些成员(某些方法),初始化程序或构造

  • 问题内容: 我们可以重载Java中的方法吗? 问题答案: 您 可以 重载该方法,但仅在JVM启动您的类时使用。例如: 从命令行运行时,即使指定一个或两个命令行参数,该命令也 始终会 打印。 当然,您可以从代码中自己调用该方法-此时将应用常规的重载规则。 编辑:请注意,您可以使用varargs签名,因为从JVM的角度来看,这是等效的:

  • 正如我们所知,没有任何规定可以防止多个线程使用方法调用方法。我确实创建了两个对象和都调用同一个线程来运行。 我需要在第二个对象开始执行之前,通过调用线程来确保第一个对象完成()其执行。 我的问题是为什么我不能在我创建的线程(即)中使用关键字? 我尝试在我创建的线程中使用“同步”来运行()方法,但它给出了任意输出(换句话说,不等待完成执行)。 你可以在程序的最底层看到我得到的输出。 正如您所看到的,

  • 正如我们所知,Java是一种面向对象的语言。在Java中,一切都是对象。我们还知道对象有一些东西(实例变量/字段)和一些事情(方法)。它的安全,我们改变了使用方法,即实例变量的状态;二传手