Jython 调用 Java 碰壁全纪录

java与Jython的相互调用 java与Jython的相互调用,对初学者很有帮助 立即下载

JavaClass 的定义
public class JavaClass {
    private String str = "";
    public JavaClass() {
        this.str = "JavaClass Init";
    }
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
}

 

一、命令行模式

 

1、进入 jython 目录,查看当前目录下只有一个JavaClass.java文件

D:\>cd jython
D:\jython>dir
2012-03-13  09:59    <DIR>          .
2012-03-13  09:59    <DIR>          ..
2012-03-13  09:59               227 JavaClass.java
               1 个文件            227 字节
               2 个目录 37,943,169,024 可用字节
               
2、启动Jython 命令行模式(jython版本是 2.2.1)

D:\jython>jython

 

3、导入 JavaClass时,提示找不到JavaClass模块

>>> import JavaClass
Traceback (innermost last):
    File "<console>", line 1, in ?
ImportError: no module named JavaClass

原因:Jython中导入的是.class文件,而JavaClass.java尚未编译生成 .class文件

 

4、Ctrl-Z退出 Jython, 编译 JavaClass.java

D:\jython>javac JavaClass.java
D:\jython>dir
2012-03-13  10:12    <DIR>          .
2012-03-13  10:12    <DIR>          ..
2012-03-13  10:12               443 JavaClass.class
2012-03-13  09:59               227 JavaClass.java
               2 个文件            670 字节
               2 个目录 37,943,169,024 可用字节

 

5、按第2步,再次进入Jython模式后导入 JavaClass时未报异常,说明成功导入,简单调用情况如下

D:\jython>jython
>>> import JavaClass
>>> jc = JavaClass()
>>> jc.str    // 调用get方法
'JavaClass Init'
>>> jc.str = "JavaClass CMD"    // 调用set方法
>>> jc.str

'JavaClass CMD'

 

二、eclipse IDE 环境

workplace 是d:\python,项目名称是mython,其结构如下

mython
    ......
    bin
        javaDemo
            JavaClass.class
        jythonDemo
            Jy2Ja.py
    lib
        ......
        jython.jar
    src
        javaDemo
            JavaClass.java
        jythonDemo
            Jy2Ja.py

 

1、JavaClass.java同上(但是第一行多了一个package javaDemo的定义)

 

2、编辑Jy2Ja.py如下:

from javaDemo import JavaClass
jc = JavaClass()
print jc.str
jc.str = "JavaClass IDE"
print jc.str

测试运行时报异常
Traceback (most recent call last):
  File "D:\python\Mython\src\jythonDemo\Jy2Ja.py", line 4, in <module>
    from javaDemo import JavaClass
ImportError: No module named javaDemo

原因:找不到javaDemo是因为“当前路径”下找不到JavaDemo文件或者目录

解决方法:可以在导入JavaClass之前导入sys.path,再 print sys.path 查看“当前路径”如下:
['D:\\python\\Mython\\src\\jythonDemo', 'C:\\Java\\jdk1.6.0_21\\jre\\lib\\resources.jar', 'C:\\Java\\jdk1.6.0_21\\jre\\lib\\rt.jar', ......, '__classpath__', '__pyclasspath__/']

手工添加 'D:\python\Mython\src\JavaDemo'到sys.path里,但是必须在导入JavaClass之前(Python是脚本语言,行解释的)

 

3、Jy2Ja.py修改后如下:

import sys.path  as path
path.append("D:\python\Mython\src\javaDemo")
from javaDemo import JavaClass
jc = JavaClass()
print jc.str
jc.str = "JavaClass IDE"
print jc.str

测试运行时仍然报2中的异常,找不到JavaDemo

原因:手工添加的 'D:\python\Mython\src\JavaDemo'有问题。因为在eclipse IDE中,每个类都在一个包里,而包是当前路径的一部分,即JavaClass已经在包JavaDemo中

 

4、再次修改后如下:

import sys.path  as path
path.append("D:\python\Mython\src")
from javaDemo import JavaClass
jc = JavaClass()
print jc.str
jc.str = "JavaClass IDE"
print jc.str

测试运行时仍然报异常
Traceback (most recent call last):
  File "D:\python\Mython\src\jythonDemo\Jy2Ja.py", line 4, in <module>
    from javaDemo import JavaClass
ImportError: cannot import name JavaClass
但是与2中的异常不一样:不能导入JavaClass。

原因:不能导入说明找到了,但是导入的时候出了问题。

        在命令行中第3步中提到Jython文件导入的应该是.class文件,在看前面mython项目的整个目录发现,class文件在mython\bin\javaDemo中。也就是说可能是因为编译器找到了JavaClass的定义即 JavaClass.java,但是找不到它的.class文件。

那java文件对应的class文件为什么不是在src包下的JavaDemo中,而是在bin包下的JavaDemo中?

        右击项目mython->Properties->Java Build Path->source最下面有default output folder中默认的是mython\bin,且这个目录在 Package Explorer视图下是看不到的,在Navigator视图中可以看到。

 

5、将default output folder 修改为 mython\src,目录结构变化如下

mython
    ......
    lib
        ......
        jython.jar
    src
        javaDemo
            JavaClass.class
            JavaClass.java
        jythonDemo
            Jy2Ja.py

 

测试运行成功:
JavaClass Init
JavaClass IDE
 

 

总结:对于新手不太习惯命令行式的Java程序调试,IDE虽然简单方便,但是都有自己默认的规则。这些规则新手可能注意不到,所以在IDE环境中照搬程序源码的时候,总会报一些奇奇怪怪的错误,使得本来简单的问题看上去很复杂。究其原因:1、对开发环境不熟悉、2、java基础不扎实。

 

特殊情况备注:

        1、***.py文件运行时,默认路径即该文件的所在路径,导入***.class时的路径就变成了 ***.py所在的包 + from中的包,即默认.class文件是在 ***.py所在的包 的 子包中,所以在调用Java文件时,需要特别添加class文件所在路径。即使Java文件和Jython文件在同一个包中,Java文件仍然在某个包中,测试运行时仍然要设置java文件所在的包最上级所在的目录,一般为 src。

        2、将Java文件和Jython文件都放在 src 下时,虽然目录结构中显示一个叫"(default package)",但是在Java文件的内部是没有包的设定的,这种情况下运行Jython文件时,可不手工设置class文件所在路径,因为此时 Jython文件的所在目录为src,而Java文件也在src中,且没有包名引起的问题。

        3、其实只要Jython文件在 src 下,Java文件在哪里都可以

 

刚刚接触 Python,正在学习java开发,故从 Jython 入手。因为基础不太扎实,期间诸多碰壁,仅此记录。

成长的道路上不怕跌倒,怕的是的跌倒了再也爬不起来。为自己加油!

Java实现调用jython执行python文件的方法 主要介绍了Java实现调用jython执行python文件的方法,结合实例形式分析了Java调用jython执行python文件的常见操作技巧及相关问题解决方法,需要的朋友可以参考下 立即下载

相关推荐

Jython远程调试

Jython远程调试.docx

使用Python调用Java第三方库

使用Python调用Java第三方库

Chialin的博客 2万+

ADS2020实战:村田电感.s2p与.mod文件导入全流程对比(附仿真结果差异分析)

本文详细对比了ADS2020中村田电感的.s2p与.mod文件导入流程及仿真结果差异,重点分析了两种模型在低频段和高频段的精度表现。通过实际案例展示.s2p文件在高频仿真中的优势,以及.mod文件在低频和非线性特性模拟中的准确性,为射频电路设计提供模型选择策略和混合仿真技巧。

weixin_29289821的博客 519

java中添加jython的jar包_如何在脚本内部动态地向Jython添加jar?

只需将jar添加到sys.path,如下所示:~ $ jythonJython 2.5.0+ (trunk:6691, Aug 17 2009, 17:09:38)[Java HotSpot(TM) Client VM (Apple Computer, Inc.)] on java1.6.0-dpType "help", "copyright", "credits" or "license" fo...

weixin_30443729的博客 227

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8287

基于Pixi.js的Live2D看板娘离线加载实战指南

本文详细介绍了基于Pixi.js实现Live2D看板娘离线加载的完整方案,涵盖环境搭建、模型加载、交互功能实现及常见问题解决。通过Pixi.js的硬件加速优势,开发者可在Web和Electron项目中无缝集成离线运行的Live2D模型,提升用户体验并避免网络依赖问题。

weixin_29001423的博客 343

【项目开发】Java调用Python方法

在这个人工智能技术迅速发展的时代,对于我们学生而言,参加软件竞赛已不再是单纯的技术比拼。传统的纯Java编写项目,虽然有其稳定与高效的优势,但在面对日益复杂的算法需求时,其竞争力已逐渐减弱。因此,将Java与Python这两种编程语言的优势相结合,实现算法与软件的完美融合,已成为提升项目竞争力的关键。本文将详细讲解使用Java调用Python的三大方法,并分析各个方法的优势。直接在Java程序中执行,可以直接利用Java虚拟机(JVM)的性能优势,减少进程间通信的开销。

k123456kah的博客 6323

中文实体关系抽取数据集大盘点:从百度Duie2.0到医疗CBLUE,哪个更适合你的NLP项目?

本文全面分析了中文实体关系抽取领域的主流数据集,包括百度DuIE 2.0、医疗CBLUE等,帮助开发者根据项目需求选择最适合的数据集。文章详细对比了各数据集的特点、适用场景及优化策略,为自然语言处理项目提供实用指南。

weixin_29284657的博客 121

jython入门

jython入门 Jython 简单入门 博客分类:pythonJythonPythonJavaCC++1. 用Jython调用Java类库 第一步、创建Java类 写一个简单的Java类,用Point来示例:Java代码 importorg.python...

362

海格通信嵌入式面试题及参考答案

计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合逻辑电路,可以通过查看芯片手册获取门电路的延迟参数。以一个简单的与门、或门、非门组成的组合逻辑为例,每个门都有自己的传输延迟,把信号从输入到输出经过的所有门的延迟相加,就得到这部分组合逻辑的延迟。 对于包含寄存器的电路,还需要考虑寄

大模型大数据攻城狮的专栏 1271

【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现

PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。图1为PID控制器的基本结构框图。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。...

FPGA/MATLAB学习教程/源码/项目合作开发 4531

Python+Jpype 调用 Java 碰壁全记录

因为在Jython 调用 Java 碰壁全纪录中已经有了“出色”碰壁经历,此处仿照其大致过程 命令行下无差异,Eclipse中略有差异(classpath的设置方式不同所致)  JavaClass 的定义 public class JavaClass {     private String str = "";     public JavaClass() {         this

newxren 1万+

Arduino、ESP32驱动TEMT6000传感器(光照传感器篇)

TEMT6000是一个三极管类型的光敏传感器,其光照强度和基极的电流成正比。用起来也相当简单,可以简单的连接该传感器的基极到模拟电压输入,通过简单的检测电压值就可以判断当前的光照强度。

不脱发的程序猿 4233

java 调用jython_如何在Java中调用Jython

最近对脚本语言产生了兴趣,特别是Jython。今天正好有空,对Jython进行了一番简单的学习。本文主要介绍如何在Java中如何调用Jython,尝试各种运行Jython脚本的方式。在Java中调用Jython,首先需要运行脚本listing.py的源码如下:fromjava.utilimportRandomrng=Random()#ThisisacommentinJythonpr...

weixin_42489088的博客 698

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 348

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jython 调用java_Jython简介,第1部分:Java编程变得更容易

关于本教程 本教程是关于什么的? 这个分为两部分的教程将向您介绍Jython脚本语言,并为您提供足够的知识以开始开发自己的基于Jython的应用程序。 Jython是已与Java平台无缝集成的Python实现。 Python是一种功能强大的面向对象的脚本语言,主要在UNIX环境中使用。 Jython非常有用,因为它在JVM上运行时提供成熟脚本语言的生产力功能。 与Python程序不...

cusi77914的博客 4621

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jython 引入java.lang_Jython与Java的互相调用

一.在Java中调用Jython主要是调用这个类org.python.util.PythonInterpreter的使用方法。这里给出Jython给的一个例子:import org.python.util.PythonInterpreter;import org.python.core.*;public class SimpleEmbedded {public static void main(S...

weixin_33344147的博客 382

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

在Java中使用Jython调用Python脚本遇到的各种问题

使用Jython调用Python程序时,由于Python程序使用了numpy库等,而使用java时不会自动导入库,需要手动设置路径。 参考: https://blog.youkuaiyun.com/xfei365/article/details/50996727 https://bbs.youkuaiyun.com/topics/392314370?page=1 https://blog.youkuaiyun.com/u01...

u010898743的博客 8925

在java中使用Jython

在java中调用python 目录前言一、Jython是什么二、使用步骤1.引入依赖2.调用代码2.python脚本三、问题1.报错:ImportError: No module named passlib2.报错:Cannot create PyString with non-byte value 前言 由于项目中需要用到Java调用Python的脚本,来实现一些功能,就对jython做了一些了解,通过jython可以实现java对python脚本的调用。 一、Jython是什么 Jython 是 P

码易的博客 1375

Jython-在JAVA调用Python脚本使用方法详解+示例代码

Jython项目提供了Java中Python的实现,为Python提供了在JVM上运行和访问Java编写的类。当前版本(Jython 2.7.x)仅支持Python 2,目前写这篇文章的最新版本到了2.7.3了。这也没有办法,我看作者17年写到2.7之后道现在为止5年了还没有支持到Python 3.毕竟是人家的开源项目也不太好说什么,程序员都忙。最新版本Jython2.7.3仅支持Python2.7。那么如果我们的Python脚本里面使用到的一些代码或者是第三方库不兼容Python2.7版本的话,就会报错。

master_hunter的博客 9119

Python与Java之间的相互调用——Jython

概述: Jython 是一种可以把两种不同的编程语言结合在一起的工具。首先,它使Python 程序员介入到Java 开发环境并让他们能快速开发方案原型,以便无缝地集成到现有的Java 平台上。其次,它能在Java 中加入脚本语言,并以此来简化数计百万计的Java 程序员的工作。Java 程序员们,再也不用为他们刚写的一个类写一大堆的测试用例或驱动程序。Jython 提供了Pyth...

weixin_30426957的博客 416
上一篇: 字符编码方式简介
下一篇: python类型转换
cdtdx
博客等级 码龄22年 45粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值