幸福的联姻:Java 和 Python

jpython的下载安装与配置 首先去官网下载https://www.jython.org/download 然后运行CMD用cd命令切换到jpython的下载目录下,我的下载目录如下 然后输出java -jar 加文件名 有英语和德语版本根据个人喜好 为了学习我选择的完全安装 最后把jpython 。bin的路径添加到path中去 然后就成功安装了 ... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> JPython 是最近出现的一个 Python 分支,由 Jim Hugunin 先生完全以 Java 撰写完成。对于 Python 和 Java 阵营来说,JPython 的出现相当令人兴奋,Python 使用者相当高兴他们现有的 Python 知识可以应用到 Java 的开发环境中;Java 的使用者也很高兴他们能够使用 Python 当作描述语言(scripting language)来操作 Java 系统、测试链接库、并在直译环境中学习 Java 链接库。 你可以在 http://www.jpython.org/ 取得 JPython,其授权方式类似于 CPython(为了有别于 Java 版的 JPython,原先版本的 Python 改叫 CPython )。 JPython 安装好之后,包含了: l jpython:JPython 的直译环境。 l jpythonc:用来将 JPython 程序编译成 Java 的 bytecode 。产生出来的程序就和一般的 Java 类别档没有两样,可以用来产生 applet、servlet、bean 等。 l 一套程序模块:提供标准的 Python 链接库给 JPython 的使用者。 l 一些范例程序:用来展示 JPython 的多重风貌。 JPython 的使用方式和 Python 很类似,请看下面的例子: ~/book> jpython JPython 1.0.3 on java1.2beta4 Copyright 1997-1998 Corporation for National Research Initiatives >>> 2 3 5 事实上,JPython 和 CPython 的运作方式几乎一样。想知道两者有何真正的差异,最新的资料可以从 http://www.python.org/jpython/differences.html 取得。其中最大的差异在: l JPython 目前比 CPython 慢。有多慢?这会因 Java 虚拟机器和 JPython 测试程序的不同而有异。不过,JPython 的作者已经承诺未来会做最佳化,使得 JPython 的速度会和 CPython一样快,甚至更快。 l JPython 欠缺一些内建模块或链接库模块。比方说,不能使用 os.system() ,因为这会造成 Java 和底层 OS 互动的困扰。有一些 CPython 所具备的大型延伸模块(比方说,Tkinter)也在 JPython 中付之阙如,因为 Java 环境原本就不具备这些工具(比方说 Tk/Tcl )。 透过 JPython,Python 程序员可以使用 Java 链接库 JPython 可以让 Python 程序员天衣无缝地使用 Java 链接库,而这是 CPython 做不到的。请看下面的程序 jpythondemo.py 和其执行结果。 from pawt import swing import java def exit(e): java.lang.System.exit(0) frame = swing.JFrame('Swing Example', visible=1) button = swing.JButton(This is a Swinging button!', actionPerformed=exit) frame.contentPane.add(button) frame.pack() 透过这个简单的程序,你可以看出,写一个用 Java Swing 来当 GUI 的 Python 程序相当简单。第一行先引入(import)Swing 的package(pawt 表示目前 Swing 模块的所在位置,可以是在 java.awt.swing、或 com.sun.java.swing、或 javax.swing)。第二行引入 java package,因为待会程序中会用到 java.lang.System.exit()。第四行建立一个 JFrame 对象,并设定此 JFrame 组件的 visible 属性为「真」。第五行建立一个 JButton 对象,设定其标示文字,并指定按键被按下时必须执行的函式为 exit()。最后两行把此 JButton 对象放到 JFrame 对象中,再将 JFrame 的大小调到刚好。 有经验的 Java 程序员可能会对 jpythondemo.py 程序中的某些部分感到有些吃惊,因为它和对等的 Java 程序有些差异。为了要让 JPython 中使用 Java 链接库和 CPython 中一样简单, JPython 在背后做了许多事,比方说,当 JPython 引入(import)一个 Java package ,就会主动地往下追踪适当的 package ,然后透过 Java Reflection API 找出 package 的内容、类别和 method 的 signature。JPython 也会实时进行 Python 和 Java 之间的型态转换。比方说:在 jpythondemo.py 程序中,按键的文字「This is a Swinging example!」是 Python 的字符串,在呼叫 JButton 的 constructor 之前,JPython 会先找出正确的 constructor(透过参数来判断),然后自动将 Python 的字符串转成 Java 的字符串。JPython 内部甚至用了更精巧的方式来允许你在 JButton 的 constructor 中方便地使用「actionPerformed=exit」当作参数。这种作法是 Java 所没有的,因为 Java 不允许 function(或 method)当作参数。在 JPython 中,你不用像 Java 需要为了提供 actionPerformed method 而建立一个 ActionListener 类别(当然你也可以在 JPython 中使用 Java 的方式,如果你不嫌啰唆的话)。 JPython as a Java Scripting Language JPython 越来越受欢迎,因为它允许程序员去探究不断出现、形形色色的 Java 链接库。大家也发现 JPython 可以帮助在 Java 中嵌入 Python 当作描述语言(scripting language),来让最终使用者量身打造、测试、或进行其它程序设计工作。关于这方面更进一步的资料,在 JPython 软件的demo/embed 次目录中有更详细的说明。 一个真正的 JPython/Swing 范例:grapher.py grapher.py 程序(外观如下图)允许使用者用图形的方式来观察数学函数的图形。本程序也用到 Swing GUI 套件。画面上有两个文字字段需要填入 Python 程序。在上面的字段中填入任意的Python 程序,在此引入(import)所需要的模块,并定义相关函数。第二个字段(标式示「Expression:」)中填入 Python 的计算式(比方说 sin(x)),而非填入 Python 叙述。绘图时每个水瓶坐标 x 值都会代入此计算式。 使用者可以自行控制绘出的图形是线状图或实心图,也可以决定绘图点数、颜色。而且,还可以把设定存到磁盘中,下次再叫出来(透过 pickle 模块)。下面就是 grapher.py 的程序代码: from pawt import swing, awt, colors, GridBag RIGHT = swing.JLabel.RIGHT APPROVE_OPTION = swing.JFileChooser.APPROVE_OPTION import java.io import pickle, os default_setup = """from math import *def squarewave(x,order): total = 0.0 for i in range(1, order*2 1, 2): total = total sin(x*i/10.0)/(float(i)) return total """ default_expression = "squarewave(x, order=3)" class Chart(awt.Canvas): color = colors.darkturquoise style = 'Filled' def getPreferredSize(self): return awt.Dimension(600,300) def paint(self, graphics): clip = self.bounds graphics.color = colors.white graphics.fillRect(0, 0, clip.width, clip.height) width = int(clip.width * .8) height = int(clip.height * .8) x_offset = int(clip.width * .1) y_offset = clip.height - int(clip.height * .1) N = len(self.data); xs = [0]*N; ys = [0]*N xmin, xmax = 0, N-1 ymax = max(self.data) ymin = min(self.data) zero_y = y_offset - int(-ymin/(ymax-ymin)*height) zero_x = x_offset int(-xmin/(xmax-xmin)*width) for i in range(N): xs[i] = int(float(i)*width/N) x_offset ys[i] = y_offset - int((self.data[i]-ymin)/(ymax-ymin)*height) graphics.color = self.color if self.style == "Line": graphics.drawPolyline(xs, ys, len(xs)) else: xs.insert(0, xs[0]); ys.insert(0, zero_y) xs.append(xs[-1]); ys.append(zero_y) graphics.fillPolygon(xs, ys, len(xs)) # draw axes graphics.color = colors.black graphics.drawLine(x_offset,zero_y, x_offset width, zero_y) graphics.drawLine(zero_x, y_offset, zero_x, y_offset-height) # draw labels leading = graphics.font.size graphics.drawString("%.3f" % xmin, x_offset, zero_y leading) graphics.drawString("%.3f" % xmax, x_offset width, zero_y leading) graphics.drawString("%.3f" % ymin, zero_x-50, y_offset) graphics.drawString("%.3f" % ymax, zero_x-50, y_offset-height leading) class GUI: def __init__(self): self.numelements = 100 self.frame = swing.JFrame(windowClosing=self.do_quit) # build menu bar menubar = swing.JMenuBar() file = swing.JMenu("File") file.add(swing.JMenuItem("Load", actionPerformed = self.do_load)) file.add(swing.JMenuItem("Save", actionPerformed = self.do_save)) file.add(swing.JMenuItem("Quit", actionPerformed = self.do_quit)) menubar.add(file) self.frame.JMenuBar = menubar # create widgets self.chart = Chart(visible=1) self.execentry = swing.JTextArea(default_setup, 8, 60) self.evalentry = swing.JTextField(default_expression, actionPerformed = self.update) # create options panel optionsPanel = swing.JPanel(awt.FlowLayout( alignment=awt.FlowLayout.LEFT)) # whether the plot is a line graph or a filled graph self.filled = swing.JRadioButton("Filled", actionPerformed=self.set_filled) optionsPanel.add(self.filled) self.line = swing.JRadioButton("Line", actionPerformed=self.set_line) optionsPanel.add(self.line) styleGroup = swing.ButtonGroup() styleGroup.add(self.filled) styleGroup.add(self.line) # color selection optionsPanel.add(swing.JLabel("Color:", RIGHT)) colorlist = filter(lambda x: x[0] != '_', dir(colors)) self.colorname = swing.JComboBox(colorlist) self.colorname.itemStateChanged = self.set_color optionsPanel.add(self.colorname) # number of points optionsPanel.add(swing.JLabel("Number of Points:", RIGHT)) self.sizes = [50, 100, 200, 500] self.numpoints = swing.JComboBox(self.sizes) self.numpoints.selectedIndex = self.sizes.index(self.numelements) self.numpoints.itemStateChanged = self.set_numpoints optionsPanel.add(self.numpoints) # do the rest of the layout in a GridBag self.do_layout(optionsPanel) def do_layout(self, optionsPanel): bag = GridBag(self.frame.contentPane, fill='BOTH', weightx=1.0, weighty=1.0) bag.add(swing.JLabel("Setup Code: ", RIGHT)) bag.addRow(swing.JScrollPane(self.execentry), weighty=10.0) bag.add(swing.JLabel("Expression: ", RIGHT)) bag.addRow(self.evalentry, weighty=2.0) bag.add(swing.JLabel("Output: ", RIGHT)) bag.addRow(self.chart, weighty=20.0) bag.add(swing.JLabel("Options: ", RIGHT)) bag.addRow(optionsPanel, weighty=2.0) self.update(None) self.frame.visible = 1 self.frame.size = self.frame.getPreferredSize() self.chooser = swing.JFileChooser() self.chooser.currentDirectory = java.io.File(os.getcwd()) def do_save(self, event=None): self.chooser.rescanCurrentDirectory() returnVal = self.chooser.showSaveDialog(self.frame) if returnVal == APPROVE_OPTION: object = (self.execentry.text, self.evalentry.text, self.chart.style, self.chart.color.RGB, self.colorname.selectedIndex, self.numelements) file = open(os.path.join(self.chooser.currentDirectory.path, self.chooser.selectedFile.name), 'w') pickle.dump(object, file) file.close() def do_load(self, event=None): self.chooser.rescanCurrentDirectory() returnVal = self.chooser.showOpenDialog(self.frame) if returnVal == APPROVE_OPTION: file = open(os.path.join(self.chooser.currentDirectory.path, self.chooser.selectedFile.name)) (setup, each, style, color, colorname, self.numelements) = pickle.load(file) file.close() self.chart.color = java.awt.Color(color) self.colorname.selectedIndex = colorname self.chart.style = style self.execentry.text = setup self.numpoints.selectedIndex = self.sizes.index(self.numelements) self.evalentry.text = each self.update(None) def do_quit(self, event=None): import sys sys.exit(0) def set_color(self, event): self.chart.color = getattr(colors, event.item) self.chart.repaint() def set_numpoints(self, event): self.numelements = event.item self.update(None) def set_filled(self, event): self.chart.style = 'Filled' self.chart.repaint() def set_line(self, event): self.chart.style = 'Line' self.chart.repaint() def update(self, event): context = {} exec self.execentry.text in context each = compile(self.evalentry.text, '', 'eval') numbers = [0]*self.numelements for x in xrange(self.numelements): context['x'] = float(x) numbers[x] = eval(each, context) self.chart.data = numbers if self.chart.style == 'Line': self.line.setSelected(1) else: self.filled.setSelected(1) self.chart.repaint() GUI() 本程序的逻辑相当直观。透过命名良好的类别名称和 method 名称,你可以轻易地了解整个程序的概观。这个程序大部分都可以用 Java 写出来(不过需要更长的程序代码)。然而,粗体字的部分可以显示出使用 Python 所带来的威力:在此模块顶端,定义了设定字段和计算式字段的默认值,前者引入数学模块的函数并定义了一个名为 squarewave(方波)的函数;后者 以特定次序的参数呼叫此方波函数(随着参数变大,结果图形会越来越像方波,呼应此函数的名称)。 如果你已经安装好 Java、Swing、以及 JPython,你不妨试试其它的设定和计算式。 在本范例中,使用 JPython 而不用 Java 的最大利基在于 update():单纯地以设定字段的程序为参数来呼叫 Python 标准的 exec(),然后每个坐标以编译好的计算式 字段程序来呼叫 eval。使用者可以在此二字段上自由地使用 Python。 JPython 仍有相当大的进步空间,Jim Hugunin 正持续地改进、最佳化 Python 和 Java 之间的接口。JPython 是 Python 的第二个实作版本,JPython 的出现也迫使 Guido van Rossum(译者注:他是Python 的创始者)必须厘清 Python 语言和实作的不同。幸运地,在这部分,Jim 和 Guido 似乎彼此观念颇能一致。
BurpSuit 安装Jpython 和Json-Hunter脚本 阅读详情

相关推荐

从DBC到ARXML:用RTA-CAR7实现车载通信协议栈自动化生成全流程

本文详细介绍了如何利用ETAS RTA-CAR7工具链,特别是ISOLAR-A和RTA-BSW ConfGen,实现从车载通信DBC文件到AUTOSAR ARXML系统描述文件,再到基础软件(BSW)协议栈代码的自动化生成全流程。该流程通过深度配置、信号路由、PDU复用及规则定制,大幅提升开发效率与一致性,是应对现代汽车电子复杂网络开发的关键实践。

brandy的博客 220

Java调用Python程序方法、Jpython使用

由于最近需要在Java中跑Python代码,需要将Java和Python两种语言结合使用。学习了一下Jpython。 一、简介    Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。 二、

brilliantZC的博客 4156

支付宝支付(三):周期扣款实现注意细节

一、周期扣款实现说明 1、官方文档入口:https://opendocs.alipay.com/open/20190319114403226822/intro 2、根据官方文档说明,周期扣款有两种方式:先签约后代扣场景和支付后签约场景 3、周期扣款接入问题文档: a>https://opendocs.alipay.com/support/01rg24 b>https://opensupport.alipay.com/support/knowledge/50249/20160248753

新鲜雾霾的博客 5702

jpython使用_jpython的使用(Java调用python脚本)

1、导入Jar找到jython-installer-2.7.0.jar 包里面的jpython.jar,加载到工作目录我用的java开发工具是IDEA、JDK8、Python3.52 、执行python源码获取一个元组里面的元素import org.python.util.PythonInterpreter;public class FirstJavaScript {public static v...

weixin_36044132的博客 1029

OC5021B 100V宽电压输入 LED车灯/大功率照明 DC降压型恒流驱动器

适用于LED大功率汽车大灯/大功率照明 OC5021B 100V宽电压输入 5A电流设计 DC-DC降压型恒流驱动IC

Handsome63841990的博客 2417

岭回归的MATLAB步骤

MATLAB 实现框架,它涵盖了从数据导入到岭回归的步骤,包括计算共线性、使用 MAE、MSE、R²、MAPE 进行评价,以及绘制相应的可视化图表。

subject625Ruben的博客 1089

java 调用 python 方法

java

qq_43649937的博客 2226

ESP32-IDF开发之旅 网络篇⑩ Web配网

本文介绍了基于ESP32S3的Web配网实现方案。作者通过移植开源项目,在ESP32S3上实现了WiFi配置功能,包括AP模式创建、HTTP服务器搭建、NVS存储读写等核心功能。文章详细解析了代码结构,包含WiFi初始化、事件处理、NVS存储管理和HTML页面服务等关键模块。实现方案采用AP+STA双模式,支持通过网页扫描WiFi并保存配置信息,适用于物联网设备的网络配置场景。代码中使用了FreeRTOS任务、ESP-IDF事件组等技术,并提供了完整的错误处理和日志记录功能。

单片机菜鸟哥的博客 350

jpython 使用非常详细

http://blog.youkuaiyun.com/it_xiao_bai/article/details/79074988

weixin_41324527的博客 3297

SE模块理解+SE-Resnet模块pytorch实现

文章目录SE模块理解SE实现注意力机制原因SE-resnet网络pytorch实现定义residual定义SE模块 SE模块理解 SENet是Squeeze-and-Excitation Networks的简称,拿到了ImageNet2017分类比赛冠军,其效果得到了认可,其提出的SE模块思想简单,易于实现,并且很容易可以加载到现有的网络模型框架中。SENet主要是学习了channel之间的相关性,筛选出了针对通道的注意力,稍微增加了一点计算量,但是效果比较好。 SE模块广泛应用于去噪,去雨方向,利用SE模

qq_42754919的博客 2万+

【Python_Zebra斑马打印机编程学习笔记(二)】基于BarTender将btw文件转换为zpl文件

本文介绍如何基于 BarTender 软件将 btw 格式的文件转换为 zpl 格式的文件,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 3375

Python解释器介绍与分类

Python是一门解释性编程语言,作为解释性语言遵循“源码→解释器(字节码)→虚拟机(可执行文件)”的运行过程。在编程过程中生成的.py文件都需要解释器才能正常执行。目前基于不同的平台,Python的解释器出现了多种不同的版本,分别使用相应平台的编程语言开发的解释器。目前常见的Python解释器包括:CPython、JPython、IPython、PyPy、IronPython五个版本。

2201_75362610的博客 1239

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

【Python学习教程】Python编程基础

类型原理优点缺点编译型语言通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。编译一次后,脱离了编译器也可以运行,并且运行效率高。可移植性差,不够灵活。解释型语言由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。一边执行一边转换,效率很低。

xiangxueerfei的博客 2430

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

常见的Python解释器,你了解多少?

Python,作为一种解释型编程语言,它的运行过程也遵循“程序源码—>解释器(字节码)—>虚拟机(可执行文件)”的流程。

pythonhy的博客 921

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jpython使用_JPython是什么

Jython(原 JPython),是一个用 Java 语言写的 Python 解释器。Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython(原 JPython),是一个用 Java 语言写的 Python 解释器。Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥...

weixin_39560029的博客 2948

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【从0-1的Python】第一篇:Python是什么?

文章目录PythonPython特性Python优点语法简单开源免费面向对象的高级语言功能扩展性强Python缺点运行速度慢代码加密困难Python应用领域Web应用开发自动化运维人工智能领域网络爬虫科学计算游戏开发Python的版本变化Python的底层实现Stackless PythonJPythonPyPy编译型语言和解释型语言编译型语言解释型语言总结 Python Python英文名称为"蟒蛇",是1989年荷兰人Guido van Rossum发明的一种解释型编程语言,python是在ABC教学.

justilake的博客 953

java调用python文件的几种方式

java调用python文件的几种方式

zhangjiaming_zjm的博客 2115

Jython使用之路(一):如何在Java中调用Python代码

Jython使用之路(一):如何在Java中调用Python代码 在平时与同学或同事交流时,我们经常会碰到这样的问题,他只会用Python,而我只会用Java,但是我们又必须实现代码的互相调用,这时候该怎么办呢?别慌,事实上,我们可以借助一个非常强大的工具:Jython。 百度百科是这样说的:Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python...

stepondust 的课堂 1万+

java调用python文件的几种方式【超细讲解!】

java调用python文件的几种方式对比及中间会遇到的各种问题解决与分析【超细讲解!】

zjq852533445的博客 3万+

jpython解释器_Python解释器种类以及特点?详细介绍!

当我们编写完Python代码时,我们会得到一个包含Python代码的以.py为扩展名的文件,这个时候,我们要运行这个代码,就需要Python解释器去执行.py文件。那么Python解释器种类有哪些?具备哪些特点呢?我们一起来看看吧。当我们编写完Python代码时,我们会得到一个包含Python代码的以.py为扩展名的文件,这个时候,我们要运行这个代码,就需要Python解释器去执行.py文件。那么...

weixin_42099942的博客 277

Python基础

一 : Python简介 1 什么是Python Python是一门优雅而健壮的编程语言,他继承了传统编译语言的强大型和通用性,同时因为借鉴了简单脚本和解释语言的易用性。 2 起源: Guido van Rossum 于1989年底创始了Python,1991年初,Python发行了第一个公开版本 3 特点: A 具有高级的数据结构,减少了“框架”开发时间。及标准库模板 B 面向...

weixin_34168880的博客 310

jpython使用_jPython使用详情

需要导入的依赖org.pythonjython-standalone2.7.0JAVA代码:1 public static void main(String[] args) {2 PythonInterpreter interpreter = new PythonInterpreter();3 interpreter.execfile("C:\\U...

weixin_29938187的博客 987
上一篇: java实现具有动态主机IP的域名解析
下一篇: :::“IBM 2001 developerWorks为未来加油”大会:::
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值