java 中使用 python外部扩展包pycha

因为大作业要求使用java完成,我却作死的想用pycha,于是进行了一系列摸索。以下分享一下成果

  1. 使用java调用python有大概三种方法,这个网上都可以查到,但是对于有外部扩展包的python脚本,只有一种方法可以运行,另外两种都会报错说 no module named xxx。
Process process = Runtime.getRuntime().exec(arg);

arg是你需要传递的参数,鉴于arg是数组的形式,于是我将数据形式存储为一维数组,奇数项为下标,偶数为数值(虽然不太合理,但是暂时没有想到别的方法)

2.于是将test.java 写成如下:

String[] a = { "2005", "1000", "2006", "2000", "2007", "1500", "2008", "2340" };
String[] arg = new String[] { "C:\\Python27\\python.exe", "pycha-0.7.0\\examples\\test.py" };
int alength = a.length;
int arglength = arg.length;
arg = Arrays.copyOf(arg, alength + arglength);// 扩容
System.arraycopy(a, 0, arg, arglength, alength);// 将第二个数组与第一个数组合并
Process process = Runtime.getRuntime().exec(arg);

3.接下来需要写test.py来接收参数并且画出pycha的图表

import sys
import cairo

from pycha.pie import PieChart

print "script name:", sys.argv[0]
i=1;
list = [] 
while i<len(sys.argv): 
    print "Parameter:", i, sys.argv[i]
    list.append((sys.argv[i], [[0, float(sys.argv[i + 1])]])) #奇数项为下标,偶数项为数值,添加进list中
    i = i + 2


surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 400, 400)
chart = PieChart(surface)

dataSet = tuple(list) #将list转化为tuple

chart.addDataset(dataSet) #设置数据
chart.render()

surface.write_to_png("testpie.png")#生成图表

这里写图片描述
4.test.py的脚本目录下会产生testpie.png,在java中就可以使用了。
建议单独放在一个文件夹中,在程序退出时,清空图片缓存。

猜你喜欢

转载自blog.csdn.net/tiancaijunm/article/details/51035133
今日推荐