如何在eclipse中启动程序与在终端中启动它不同?

时间:2015-10-02 17:39:04

标签: java eclipse macos

我有一些代码在从终端启动时工作正常,但在从eclipse启动时却没有。显然,我可以使用终端,但出于调试目的,将问题排序出去会很不错。此外,理解正在发生的问题会很好。任何人都可以解释一下如何解释eclipse中的启动与终端中的启动有何不同。 代码:

static public Process getNewLiEProcess(boolean redirect){
    ProcessBuilder proc = new ProcessBuilder("lie");
    proc.redirectErrorStream(redirect);
    try {
    return proc.start();
    // TODO: figure out why this consistently fails when run in Eclipse console, 
    // even though it seems to work when run in terminal.
    } catch (IOException e) {


    e.printStackTrace();
    return null;
    }
}

在Eclipse中启动时出现错误消息:

java.io.IOException: Cannot run program "lie": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
    at edu.siu.math.egut.io.LiE.getNewLiEProcess(LiE.java:224)
    at edu.siu.math.egut.io.LiE.<init>(LiE.java:198)
    at edu.siu.math.egut.main.CharacterAction.main(CharacterAction.java:106)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:184)
    at java.lang.ProcessImpl.start(ProcessImpl.java:130)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
    ... 3 more
Exception in thread "main" java.lang.NullPointerException
    at edu.siu.math.egut.io.LiE.<init>(LiE.java:202)
    at edu.siu.math.egut.main.CharacterAction.main(CharacterAction.java:106)

使用终端启动时,相同的代码会成功实例化&#34;谎言&#34;过程(程序&#34;谎言&#34;在我的系统上的usr / bin中)。

1 个答案:

答案 0 :(得分:1)

差异可能来自:

  • 用于执行程序的CLASSPATH二进制文件
  • 环境变量,尤其是JAVA_HOMEPATHLD_LIBRARY_PATHjava(仅举几例)
  • 传递给java -version
  • 的各种标志
  • 工作目录

您必须完全了解您的计划在上述因素方面的要求,这一点非常重要。 一旦了解了所有这些,就可以验证是否正确设置了需求,无论是从命令行还是从Eclipse执行。

如果你可以在命令行上运行, 然后困难的部分完成。 在命令行上,您可以非常轻松地验证您的环境:

  • java验证正在使用的env | sort | less二进制文件
  • java验证正在使用的环境变量
  • 传递给pwd的标志就在您执行的命令
  • Background验证工作目录

通常情况下更难以反过来解决问题, 当事情从Eclipse工作但不是从命令行工作。 验证相同的细节需要很好地理解Eclipse, 以及菜单,项目和启动器设置中的内容。