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
JavaClassIDE
总结:对于新手不太习惯命令行式的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 入手。因为基础不太扎实,期间诸多碰壁,仅此记录。
成长的道路上不怕跌倒,怕的是的跌倒了再也爬不起来。为自己加油!
分享到:
相关推荐
Jython for Java Programmers.chm Java程序员学习Jython的教程。
java与Jython的相互调用,对初学者很有帮助
Jython for Java Programmers
NULL 博文链接:https://yinxvxv.iteye.com/blog/811328
Jython 是一种完整的语言,而不是一个简单的 Java 翻译器或 Python 编译器,它是 Python 在 Java 中的完整实现。由于 Jython 继承了 Java 和 Python 二者的特性从而使其显得很独特。那 Jython,Java 以及 Python ...
java中jython操作把python数据类型转成java类型 例如list->List dict->Map set->Set 以及一些基本操作的包装整合
java调用python脚本所需jar包,最新的版本,亲测可用,希望对你有帮助。jython-standalone-2.7.0.jar,jython-standalone-2.7.0.jar,
java调用Python示例,详情请参考博文:http://blog.csdn.net/l1028386804/article/details/50915556
Jython is an open source implementation of the high-level, dynamic, object-oriented scripting language Python seamlessly integrated with the Java platform. The predecessor to Jython, JPython, is ...
主要介绍了Java调用python的方法(jython),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
jython java调用python的jar
在Java中想要调用python程序,可以加入python的依赖包。 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。...
Scientific Data Analysis using Jython Scripting and Java
该资源包含jython2.5.4.jar和jython2.7.0.jar,jython的版本要与jdk的版本要对应,这样可以解决“Unsupported major.minor version 51.0”问题。其中,对于jdk1.6.x的版本,请使用jython2.5.4.jar jdk1.7.x的版本,...
主要介绍了Java实现调用jython执行python文件的方法,结合实例形式分析了Java调用jython执行python文件的常见操作技巧及相关问题解决方法,需要的朋友可以参考下
jython 工具包,一个.py文件 里面有大概100多个方法
压缩包内包含了jython控制串口编程的文档,和必备压缩包。 详细请见文档:jython调用串口模块.doc 有问题请留言。谢谢!
Jython - Python的Java语言实现 jython_installer-2.5.2rc2.zip 注意,需要先安装JDK 1, 解压到某处 2, 进入该解压目录, 执行jython.bat
交互式实验-Jython提供了一个交互式解释器,可用于与Java包或运行的Java应用程序交互。这允许程序员使用Jython来实验和调试任何Java系统。 快速应用程序开发——Python程序通常比等效Java程序短2-10倍。这直接转化为...
jython官方正版资源 为了省去大家找Jython安装包的时间,附上此Jython版本。 Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。