Jython是一个使用相当可靠的语法的快速Java脚本的好工具。 实际上,当使用jmx为您的Java应用程序实现一些维护或监视脚本时,它的运行效果非常好。

如果您与其他具有python背景的团队合作,则将python集成到您的java应用程序是绝对有意义的。

首先,让我们使用独立版本导入jython interpeter。

group 'com.gkatzioura'
version '1.0-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.5repositories {mavenCentral()
}dependencies {testCompile group: 'junit', name: 'junit', version: '4.11'compile group: 'org.python', name: 'jython-standalone', version: '2.7.0'
}

因此,最简单的方法就是在我们的类路径中执行python文件。 该文件将是hello_world.py

print "Hello World"

然后将文件作为输入流传递给干预者

package com.gkatzioura;import org.python.core.PyClass;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.core.PyObjectDerived;
import org.python.util.PythonInterpreter;import java.io.InputStream;/*** Created by gkatzioura on 19/10/2016.*/
public class JythonCaller {private PythonInterpreter pythonInterpreter;public JythonCaller() {pythonInterpreter = new PythonInterpreter();}public void invokeScript(InputStream inputStream) {pythonInterpreter.execfile(inputStream);}}
@Testpublic void testInvokeScript() {InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("hello_world.py");jythonCaller.invokeScript(inputStream);}

下一步是创建一个python类文件和另一个将导入该类文件并实例化一个类的python文件。

该类文件将是divider.py。

class Divider:def divide(self,numerator,denominator):return numerator/denominator;

导入Divider类的文件将是classcaller.py

from divider import Dividerdivider = Divider()print divider.divide(10,5);

所以让我们测试一下

@Testpublic void testInvokeClassCaller() {InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("classcaller.py");jythonCaller.invokeScript(inputStream);}

从这个例子中我们可以理解的是,解释器成功地从类路径中导入了文件。

使用解释器运行文件是可以的,但是我们需要充分利用python中实现的类和函数。
因此,下一步是创建一个python类,并使用java使用其功能。

package com.gkatzioura;import org.python.core.PyClass;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.core.PyObjectDerived;
import org.python.util.PythonInterpreter;import java.io.InputStream;/*** Created by gkatzioura on 19/10/2016.*/
public class JythonCaller {private PythonInterpreter pythonInterpreter;public JythonCaller() {pythonInterpreter = new PythonInterpreter();}public void invokeClass() {pythonInterpreter.exec("from divider import Divider");PyClass dividerDef = (PyClass) pythonInterpreter.get("Divider");PyObject divider = dividerDef.__call__();PyObject pyObject = divider.invoke("divide",new PyInteger(20),new PyInteger(4));System.out.println(pyObject.toString());}}

您可以在github上找到源代码。

翻译自: https://www.javacodegeeks.com/2016/10/embed-jython-java-codebase.html

将Jython嵌入到您的Java代码库中相关推荐

  1. java中使用jython_将Jython嵌入到您的Java代码库中

    java中使用jython Jython是一个使用相当可靠的语法的快速Java脚本的好工具. 实际上,当使用jmx为您的Java应用程序实现一些维护或监视脚本时,它的运行效果非常好. 如果您与其他具有 ...

  2. 连连看java代码_连连看 - java代码库 - 云代码

    [java]代码库/* * To change this license header, choose License Headers in Project Properties. * To chan ...

  3. ajax代码 java,AJAX - java代码库 - 云代码

    [java]代码库1.什么是AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). 2.ajax的特点:局部刷新 3.Aj ...

  4. java代码雨_代码雨 - java代码库 - 云代码

    [java]代码库import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...

  5. java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码

    [java]代码库public class Computer { String name; int score; public int showfist(){ int quan; quan=(int) ...

  6. java 登陆拦截_登录拦截 - java代码库 - 云代码

    [java]代码库package com.app.common; import org.apache.log4j.Logger; import com.app.model.User; import c ...

  7. java 挂机锁屏 源码_挂机界面 - java代码库 - 云代码

    [java]代码库//挂机 package com.view; import java.awt.Color; /** * 挂机界面 * @author Administrator * */ publi ...

  8. java秒表代码_秒表 - java代码库 - 云代码

    [java]代码库package Day0822; import java.awt.event.*; import javax.swing.*; import java.awt.*; public c ...

  9. java图书信息添加代码_图书 - java代码库 - 云代码

    [java]代码库package com.mahe; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt. ...

最新文章

  1. keras 的 example 文件 mnist_swwae.py 解析
  2. 只要7天 传统便利店就能免费升级无人超市
  3. 最完美的ASCII 表
  4. sqldeveloper 连接oracle失败报12514(日常错误)
  5. python之eval函数,map函数,zip函数
  6. vscode用作markdown入门2--代码上下标目录字体
  7. 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?...
  8. AI人工智能 / ML机器学习专业词汇集
  9. 揭秘Facebook官方底层C++函数Folly
  10. ZOJ 3380 Patchouli's Spell Cards(概率+大数)
  11. struct和class的区别
  12. 将数学模型用matlab,matlab课件第3章_控制系统的数学模型及其转换.ppt
  13. MIUI10使用adb工具实现免ROOT冻结系统应用和去广告
  14. 矩阵相乘的strassen算法_矩阵乘法Strassen算法
  15. vue2引入ionicons图标
  16. nexus开机启动设置
  17. CTF---Web入门第十六题 天下武功唯快不破
  18. 51NOD 1072 Wythoff Game
  19. java证书验证失败_使用certbot证书验证失败
  20. jQuery UI Dialog

热门文章

  1. C++描述杭电OJ 2008.数值统计 ||
  2. java语音播报案例
  3. Localdatetime
  4. 2017蓝桥杯省赛---java---C---7 Excel地址)
  5. mysql update field_mysql-更新表与另一个选择,但字段是SUM(someField)
  6. grub shell 错误_使用grub-install修复Grub时出错
  7. java出代码1601_LeetCode 1601. 最多可达成的换楼请求数目
  8. 高级数据结构实现——自顶向下伸展树
  9. java泛型程序设计——约束与局限性
  10. Mac 环境变量配置