我有一些代码在从终端启动时工作正常,但在从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中)。
答案 0 :(得分:1)
差异可能来自:
CLASSPATH
二进制文件JAVA_HOME
,PATH
,LD_LIBRARY_PATH
,java
(仅举几例)java -version
您必须完全了解您的计划在上述因素方面的要求,这一点非常重要。 一旦了解了所有这些,就可以验证是否正确设置了需求,无论是从命令行还是从Eclipse执行。
如果你可以在命令行上运行, 然后困难的部分完成。 在命令行上,您可以非常轻松地验证您的环境:
java
验证正在使用的env | sort | less
二进制文件java
验证正在使用的环境变量pwd
的标志就在您执行的命令Background
验证工作目录通常情况下更难以反过来解决问题, 当事情从Eclipse工作但不是从命令行工作。 验证相同的细节需要很好地理解Eclipse, 以及菜单,项目和启动器设置中的内容。