我正在创建一个启动器,只需单击一个按钮即可启动游戏(用任何语言编写)。例如,我尝试启动的一个游戏(用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();
}
}
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
首先,使用ProcessBuilder类而不是Runtime对象,建议使用它。其次,正如@MadProgrammer所述,将您的起始目录更改为文件的位置。当您运行java程序时,1.png文件位于相对位置,并且位于您的java文件的路径中,当您单独运行它时,1.png文件位于您的python程序的路径中,这是正确的道路。