在java中启动单独的进程,无法找到.png文件

时间:2014-11-24 03:33:53

标签: java python

我正在创建一个启动器,只需单击一个按钮即可启动游戏(用任何语言编写)。例如,我尝试启动的一个游戏(用python编写的扫雷)无法成功启动,我的代码会产生以下消息:

../ Games / minesweeper / Minesweeper.py成功发布

追踪(最近一次呼叫最后一次):

文件" ../游戏/扫雷/ Minesweeper.py",第455行,

app = Minesweeper()

文件" ../游戏/扫雷/ Minesweeper.py",第30行, init

self.loadImages()

文件" ../游戏/扫雷/ Minesweeper.py",第71行,在loadImages中

self.images[1] = PhotoImage(file="1.png")

文件" /usr/lib64/python3.3/tkinter/ init .py",第3425行, init

Image.__init__(self, 'photo', name, cnf, master, **kw)

文件" /usr/lib64/python3.3/tkinter/ init .py",第3381行, init

self.tk.call(('image', 'create', imgtype, name,) + options)

_tkinter.TclError:无法打开" 1.png":没有这样的文件或目录

处理exitValue:1

但是,只要我的java代码启动了exec,我就可以独立运行这个游戏。 "无法打开" 1.png"退回。这是我创建流程的代码:

public void createProcess(String path)
{
    Process cmd;
    try 
    {
        cmd = Runtime.getRuntime().exec(path);
        System.out.println(path + " successful launch");
        InputStream stderr = cmd.getErrorStream();
        InputStreamReader isr = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);
        BufferedReader stdInput = new BufferedReader(new
                InputStreamReader(cmd.getInputStream()));
        String line = null;
        System.out.println("<ERROR>");
        while ( (line = br.readLine()) != null)
        {
            System.out.println(line);
        }
        System.out.println("</ERROR>");
        int exitVal = cmd.waitFor();
        System.out.println("Process exitValue: " + exitVal);
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,使用ProcessBuilder类而不是Runtime对象,建议使用它。其次,正如@MadProgrammer所述,将您的起始目录更改为文件的位置。当您运行java程序时,1.png文件位于相对位置,并且位于您的java文件的路径中,当您单独运行它时,1.png文件位于您的python程序的路径中,这是正确的道路。