0

嗨,我正在尝试做一个能够访问命令提示符并能够启动 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

4

1 回答 1

0

我可以想到一些事情开始......

您传递给 的每个参数都应该ProcessBuilder是要执行的命令的单独参数。好吧,我不是 100%,如果你构建的命令会起作用,但它对我来说就像一团糟。

相反,如果你想改变命令执行的位置,为什么不直接使用 的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);
            }
        }
}
于 2013-08-14T08:25:33.593 回答