无法从java代码

时间:2018-01-04 14:10:19

标签: java python

我有java代码来调用python脚本

爪哇

private void visualizeData() {
    try{
        Runtime.getRuntime().exec(“python pyScripts/visualize.py”)
    } catch (IOException e){
        e.printStackTrace();
    }
}

这是我的visualize.py代码:

visualize.py

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt

f = open(“ecoli_data_transformed.txt”,”r”)

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

for line in f:
    (a, b, c) = line.split(“\t”)
    a = float(a)
    b = float(b)
    c = float(c)    

    ax.scatter(a,b,c)

ax.setxlabel(‘PCA1’)
ax.setylabel(‘PCA2’)
ax.setzlabel(‘PCA3’)

plt.show()

但它没有绘制数据。

如果我从java代码调用test.py脚本(test.py与visualize.py在同一目录中),它可以工作:

test.py

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt
import numpy as np

np.random.seed(19680801)

def randrange(n, min, vmcx):
    return (vmax - vein)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)

n = 100

for c, m, slow, high in [(‘r’, ‘o’, -50, -25), (‘b’, ‘^’, -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, c=c, marker=m)

ax.set_xlabel(‘X Label’)
ax.set_ylabel(‘Y Label’)
ax.set_zlabel(‘Z Label’)

plt.show()

可能是什么问题?

*注意:通过'python visualize.py'从控制台调用visualize.py脚本完全正常。

1 个答案:

答案 0 :(得分:1)

您在python脚本中传递给Platform.runLater(()->tid.showAndWait()); 命令的相对路径可能是问题所在。

您的Java程序位于与Python程序所在目录不同的目录中。当它启动python脚本时,当前路径仍然是Java程序的路径。

这意味着Python无法找到您尝试打开的文件的相对路径open()

解决方法是包含.txt文件的完整路径:

ecoli_data_transformed.txt

更好的解决方案是以编程方式确定它:

f = open(“C:\\path\\to\\your\\file\\ecoli_data_transformed.txt”,”r”)