java - 奇怪的 runtime.exec() 异常

标签 java

我在 Windows 7 上运行 Eclipse(在 XP 上也是如此)。 正如您在下面看到的,路径保持不变,只是使用第二种技术(我需要使用)找不到它。

这个有效:

Runtime runtime = Runtime.getRuntime();

    // Start street processes
    for (int i=0; i < NUM_STREETS; i++) {

        Process process = runtime.exec("java -classpath \\bin trafficcircle.Street");

        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;

        while ((line = br.readLine()) != null && !line.isEmpty()) {
            System.out.println(line);
        }
    }

但这不是:

Runtime runtime = Runtime.getRuntime();
String[] cmdAndArgs = {"java -classpath \\bin trafficcircle.Street",
            "",
            "" };

    // Start street processes
    for (int i=0; i < NUM_STREETS; i++) {
        Process process = runtime.exec(cmdAndArgs);

        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line;

        while ((line = br.readLine()) != null && !line.isEmpty()) {
            System.out.println(line);
        }
    }

并产生以下异常。为什么?谢谢。

java.io.IOException: Cannot run program "java -classpath \bin trafficcircle.Street": CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at trafficcircle.Main.runConfig(Main.java:81)
    at trafficcircle.Main.main(Main.java:20)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 5 more

最佳答案

我认为您需要将参数分开放置。否则它会寻找一个名为 java -classpath... 的 exe。所以像

String[] cmdAndArgs = {"java",
        "-classpath",
        "\\bin",
        "trafficcircle.Street" };

要传递额外的参数,只需将它们包含在数组中

String arg1 = ...;
String arg2 = ...;
String[] cmdAndArgs = {"java",
        "-classpath",
        "\\bin",
        "trafficcircle.Street",
        arg1,
        arg2 };

关于java - 奇怪的 runtime.exec() 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8102916/

相关文章:

java - 执行 HTTP GET 请求的 Response 实体的 mockito 单元测试用例

java - 如何将列表从 Controller 发送到thymeleaf

java - 在单个存储过程中创建两个或多个表

java - 通过Controller方法和applicationContext获取bean的区别

java - 如何配置Spring从jar外部加载application.properties?

java - 我可以使用 JCheckbox 来显示 "mixed state"

java - 如何使用 Java 获取 Ubuntu 版本?

Java - 以编程方式获取 Excel 和打开的 Office 电子表格以制表符分隔文件

java - 如何使用正则表达式并将结果分配给 Android 中的变量?

java - 在 bitbucket 管道上执行 gradle 后出现 "Could not complete execution for Gradle Test Executor 2"错误