Java与Python混合调用请教

reallovefly 2010-01-28 08:36:15
我用python开发了一组GUI界面,另外一个同志用java实现了应用主框架,现在要将这些GUI界面集成到主框架里面去。不知道在java里面该如何调用?简而言之,就是java代码里面如何调用一个外部的.py文件。请给出一个简单的演示例子。谢谢。
...全文
1699 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyaliteye 2011-12-14
  • 打赏
  • 举报
回复
最后怎么处理的?楼主?
雨落 2011-07-25
  • 打赏
  • 举报
回复
哎,请问java怎么调用ubuntu中的.py文件,不要用jython,因为我的python脚本中有个import的类jython是没有的,但是那个又是必须的!谢谢
hp0632 2011-07-21
  • 打赏
  • 举报
回复
我也想,这样做,python太牛了,但是公司项目里没有用到python,哎,郁闷,看看吧,以后自己做个东西可以试试
ccq5721974 2010-09-24
  • 打赏
  • 举报
回复
有谁有完整的Java调用Python项目
notax 2010-03-01
  • 打赏
  • 举报
回复
不如用jython直接调用java的swing GUI 库,jython 的好处就是可以调用java的class

http://wiki.python.org/jython/SwingWorker
reallovefly 2010-03-01
  • 打赏
  • 举报
回复
或者notax兄可否给出一条道,采用哪种方式写的python图形界面,在Java下可以调用?
reallovefly 2010-03-01
  • 打赏
  • 举报
回复
引用 12 楼 notax 的回复:
不行,wxpython 是 用cpython 开发的库, 用jython解释不了


肯定可以解释的,我的帖子说的最后一句话意思就是:
我采用Eclipse环境+Pydev,可以直接在Eclipse下面完成wxpython写的图形脚本的调用和执行。
而Eclipse是典型的Java环境,所以说明java下可以调用wxpython库。
但确实不知道机关在什么地方?踌躇阿。。。
notax 2010-03-01
  • 打赏
  • 举报
回复
不行,wxpython 是 用cpython 开发的库, 用jython解释不了
reallovefly 2010-03-01
  • 打赏
  • 举报
回复
先谢谢各位XD的回复,我的问题明确一下:
我的java文件代码为:
package test;


import org.python.util.PythonInterpreter;
import org.python.core.*;


public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PythonInterpreter interp = new PythonInterpreter();
interp.execfile("E:\\CodeEclipse\\CallPython\\src\\test\\test.py");

}

}

我的python代码为:
#!/bin/env python
# -*- coding: cp936 -*-
import wx
class MyFrame(wx.Frame):

def __init__(self):
wx.Frame.__init__(self, None, -1, "My Frame", size=(300, 300))
panel = wx.Panel(self, -1)
panel.Bind(wx.EVT_MOTION, self.OnMove)
wx.StaticText(panel, -1, "Pos:", pos=(10, 12))
self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(40, 10))

def OnMove(self, event):
pos = event.GetPosition()
print event
self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y))

if __name__ == '__main__':
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show(True)
app.MainLoop()
具体的情况描述如下:
我的python应用是一个GUI应用,引用了wxpython图形开发库,因此调用时会报找不到wx文件。
事实上,我已经安装了wxpython库,是否还需要别的配置?
另外采用java调用python图形界面肯定是可以过的,我用Eclipse+Pydev可以直接在Eclipse环境下启动python图形应用。
reallovefly 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 notax 的回复:]
这个test.py比较奇怪,在上面的程序里没有用到他,

很奇怪喔,

我在这里试,这个程序还是蛮听话的喔
[/Quote]
我就是引用了一个jpython.jar的库。你那得配置?
reallovefly 2010-02-01
  • 打赏
  • 举报
回复
Exception in thread "main" traceback (innermost last)
(no code object) at line 0
IOError : File not found - test.py( ~0 歹克)
notax 2010-02-01
  • 打赏
  • 举报
回复
这个test.py比较奇怪,在上面的程序里没有用到他,

很奇怪喔,

我在这里试,这个程序还是蛮听话的喔
notax 2010-01-30
  • 打赏
  • 举报
回复
呵呵, 你把错误的提示报出来看看
reallovefly 2010-01-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 notax 的回复:]
写了个试试,java调用jython PythonInterpreter,很方便oh

// <------------------my_utils.py-------------
def adder(a, b):
    return a + b
//------------------my_utils.py------------->


// <------------------B.java--------------------
import org.python.util.PythonInterpreter;
import org.python.core.*;


public class B {
    public static void main(String args[]) {
        PythonInterpreter interp = new PythonInterpreter();
        interp.execfile("my_utils.py");

        PyFunction func = (PyFunction)interp.get("adder",PyFunction.class);

        int a = 2010, b = 2 ;
        PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
        System.out.println("anwser = " + pyobj.toString());
    }
}
//------------------B.java-------------------->

[/Quote]

采用这个方法我尝试了一下,可是仍然报IO错误。
错误提示是interp.execfile("my_utils.py" );还有一堆乱字符。很奇怪。
thy38 2010-01-28
  • 打赏
  • 举报
回复
调用py文件不是问题,问题是你想怎样在Java和Python之间交换数据。
notax 2010-01-28
  • 打赏
  • 举报
回复
写了个试试,java调用jython PythonInterpreter,很方便oh

//<------------------my_utils.py-------------
def adder(a, b):
return a + b
//------------------my_utils.py------------->


//<------------------B.java--------------------
import org.python.util.PythonInterpreter;
import org.python.core.*;


public class B {
public static void main(String args[]) {
PythonInterpreter interp = new PythonInterpreter();
interp.execfile("my_utils.py");

PyFunction func = (PyFunction)interp.get("adder",PyFunction.class);

int a = 2010, b = 2 ;
PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("anwser = " + pyobj.toString());
}
}
//------------------B.java-------------------->
reallovefly 2010-01-28
  • 打赏
  • 举报
回复
而且我不希望通过将py文件写到一个batch文件中,再把batch用py2exe打包成.exe文件,最后用java应用调用exe这种搞法,呵呵。
reallovefly 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 reallovefly 的回复:]
我用python开发了一组GUI界面,另外一个同志用java实现了应用主框架,现在要将这些GUI界面集成到主框架里面去。不知道在java里面该如何调用?简而言之,就是java代码里面如何调用一个外部的.py文件。请给出一个简单的演示例子。谢谢。
[/Quote]

我的主框架与GUI之间的参数传递不多,就只有几个参数。可以用确定格式的文件,也可以考虑像批处理一样在调用时候传递参数。

现在的python都是在Eclipse下完成(安装有pydev),因此java调用python的技术肯定是通的。

还请不吝赐教。给个例子先。
winbsd 2010-01-28
  • 打赏
  • 举报
回复

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧