Java Runtime.getRuntime()。exec();没有运行程序

时间:2013-03-05 10:28:28

标签: java linux debian openjdk proc

问题是我正在尝试制作一个游戏启动器,当你登录它时会开始实际的游戏。

我被告知执行此操作的代码是Runtime.getRuntime().exec();

我可以运行像Runtime.getRuntime().exec("firefox");这样的简单程序,但是当我尝试运行我的程序时,它无法启动。

这是我的代码

Map<String, String> g = System.getenv(); //find home dir
System.out.println("java -jar " + g.get("HOME") + "/.2DMC/bin/2DG.jar");
Runtime.getRuntime().exec("java -jar " + g.get("HOME") + "/.2DMC/bin/2DG.jar");

我也试过

Map<String, String> g = System.getenv(); //find home dir
System.out.println("java -jar " + g.get("HOME") + "/.2DMC/bin/2DG.jar");
Process proc = Runtime.getRuntime().exec("java -jar " + g.get("HOME") +
                                         "/.2DMC/bin/2DG.jar");

我正在使用linux Debian

java -version ouput

java version "1.6.0_27"
OpenJDK Runtime Environment (IcedTea6 1.12.3) (6b27-1.12.3-1)
OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)

所有帮助apreciated

2 个答案:

答案 0 :(得分:2)

由于你没有解释当你试图运行java -jar时会发生什么(例外?什么?你得到一个Process对象吗?),我可以想到它发生的一个原因。您的HOME环境变量包含一个空格(您在Windows下,不是您),这会让exec()感到困惑。

如果我的理论是正确的,那么exec()实际上正在解析你的单字符串命令,如下所示:假设HOME = C:\Documents and Settings\Myself -

执行名为java的程序,传入以下参数:

  1. -jar
  2. C:\Documents
  3. and
  4. Settings\Myself\whatever.jar
  5. 最安全的执行方式是传入一个字符串数组,而不是。

    Runtime.exec(new String[] {"java", "-jar", g.get("HOME")+"/.2DMC/bin/2DG.jar"});
    

答案 1 :(得分:0)

我发现了我的问题。它出现在我的第二个罐子里。我没有正确加载一些库,所以它不能从不同的位置工作。

我解决了我的问题。谢谢你的帮助