将Jython嵌入到您的Java代码库中
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代码库中相关推荐
- java中使用jython_将Jython嵌入到您的Java代码库中
java中使用jython Jython是一个使用相当可靠的语法的快速Java脚本的好工具. 实际上,当使用jmx为您的Java应用程序实现一些维护或监视脚本时,它的运行效果非常好. 如果您与其他具有 ...
- 连连看java代码_连连看 - java代码库 - 云代码
[java]代码库/* * To change this license header, choose License Headers in Project Properties. * To chan ...
- ajax代码 java,AJAX - java代码库 - 云代码
[java]代码库1.什么是AJAX AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). 2.ajax的特点:局部刷新 3.Aj ...
- java代码雨_代码雨 - java代码库 - 云代码
[java]代码库import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; ...
- java猜拳游戏代码_猜拳游戏 - java代码库 - 云代码
[java]代码库public class Computer { String name; int score; public int showfist(){ int quan; quan=(int) ...
- java 登陆拦截_登录拦截 - java代码库 - 云代码
[java]代码库package com.app.common; import org.apache.log4j.Logger; import com.app.model.User; import c ...
- java 挂机锁屏 源码_挂机界面 - java代码库 - 云代码
[java]代码库//挂机 package com.view; import java.awt.Color; /** * 挂机界面 * @author Administrator * */ publi ...
- java秒表代码_秒表 - java代码库 - 云代码
[java]代码库package Day0822; import java.awt.event.*; import javax.swing.*; import java.awt.*; public c ...
- java图书信息添加代码_图书 - java代码库 - 云代码
[java]代码库package com.mahe; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt. ...
最新文章
- keras 的 example 文件 mnist_swwae.py 解析
- 只要7天 传统便利店就能免费升级无人超市
- 最完美的ASCII 表
- sqldeveloper 连接oracle失败报12514(日常错误)
- python之eval函数,map函数,zip函数
- vscode用作markdown入门2--代码上下标目录字体
- 给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?...
- AI人工智能 / ML机器学习专业词汇集
- 揭秘Facebook官方底层C++函数Folly
- ZOJ 3380 Patchouli's Spell Cards(概率+大数)
- struct和class的区别
- 将数学模型用matlab,matlab课件第3章_控制系统的数学模型及其转换.ppt
- MIUI10使用adb工具实现免ROOT冻结系统应用和去广告
- 矩阵相乘的strassen算法_矩阵乘法Strassen算法
- vue2引入ionicons图标
- nexus开机启动设置
- CTF---Web入门第十六题 天下武功唯快不破
- 51NOD 1072 Wythoff Game
- java证书验证失败_使用certbot证书验证失败
- jQuery UI Dialog
热门文章
- C++描述杭电OJ 2008.数值统计 ||
- java语音播报案例
- Localdatetime
- 2017蓝桥杯省赛---java---C---7 Excel地址)
- mysql update field_mysql-更新表与另一个选择,但字段是SUM(someField)
- grub shell 错误_使用grub-install修复Grub时出错
- java出代码1601_LeetCode 1601. 最多可达成的换楼请求数目
- 高级数据结构实现——自顶向下伸展树
- java泛型程序设计——约束与局限性
- Mac 环境变量配置