嗨我试着做一个程序,能够访问命令提示符,并能够启动solr的start.jar文件,这样我的搜索程序就可以工作..问题是当我在eclipse中使用代码时,程序运行顺利,但当我在netbeans中转移我的程序时,它说它无法访问jar文件。它不会给我任何堆栈跟踪错误,这就是为什么我不知道有什么问题。这是我的代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"D:\\Downloads\\solr-4.2.1\\solr-4.2.1\\example\" && java -jar start.jar");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}
错误就是这样:错误:无法访问jarfile start.jar
答案 0 :(得分:0)
我可以想到一些事情......
您要转到ProcessBuilder
的每个参数都应该是要执行的命令的单独参数。好吧,如果你构建的命令有效,我不是百分之百,但对我来说这看起来很乱。
相反,如果要更改执行命令的位置,为什么不使用directory
ProcessBuilder
方法,这将在命令时将执行上下文更改为指定位置执行...
public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder("java.exe", "-jar", "start.jar");
builder.directory(new File("D:\\Downloads\\solr-4.2.1\\solr-4.2.1\\example"));
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = r.readLine()) != null) {
System.out.println(line);
}
}
}