You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java执行CMD命令无响应且未生成目标文件,如何解决?

问题排查与解决步骤

1. 修正CMD命令格式

你当前的cmd命令缺少/c参数——这是CMD执行后续命令的必要参数,没有它CMD无法正确解析并运行JMeter指令。正确的命令格式应为:

String cmd = "cmd /c D:\\Programming\\JMeter\\apache-jmeter-5.5\\bin\\jmeter -n -t D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example.jmx -l D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example_jtl.jtl -e -o D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example_visual";

2. 读取进程输出流与错误流

你的代码仅获取了错误流但未读取内容,这会导致进程因输出缓冲区满而阻塞,无法完成执行。必须读取这两个流,既能避免进程挂起,也能查看执行中的错误信息。修改后的代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class JMeterRunner {
    public static void main(String[] args) {
        try {
            System.out.println("begin cmd");
            Runtime mt = Runtime.getRuntime();
            String cmd = "cmd /c D:\\Programming\\JMeter\\apache-jmeter-5.5\\bin\\jmeter -n -t D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example.jmx -l D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example_jtl.jtl -e -o D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\example_visual";
            Process pro = mt.exec(cmd);

            // 读取标准输出流
            new Thread(() -> {
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getInputStream()))) {
                    String line;
                    while ((line = reader.readLine()) != null) {
                        System.out.println("JMeter输出: " + line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();

            // 读取错误输出流
            new Thread(() -> {
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(pro.getErrorStream()))) {
                    String line;
                    while ((line = reader.readLine()) != null) {
                        System.err.println("JMeter错误: " + line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();

            int exitCode = pro.waitFor();
            System.out.println("进程退出码: " + exitCode);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3. 路径与权限检查

  • 确认example.jmx文件确实存在于指定路径,路径大小写需与实际文件完全一致。
  • 确认输出目录D:\\Programming\\JMeter\\apache-jmeter-5.5\\result\\有写入权限,Windows系统下避免放在Program Files等需管理员权限的目录,或直接以管理员身份运行Java程序。
  • 先手动在CMD中执行JMeter命令,验证命令本身是否能生成文件:
D:\Programming\JMeter\apache-jmeter-5.5\bin\jmeter -n -t D:\Programming\JMeter\apache-jmeter-5.5\result\example.jmx -l D:\Programming\JMeter\apache-jmeter-5.5\result\example_jtl.jtl -e -o D:\Programming\JMeter\apache-jmeter-5.5\result\example_visual

如果手动执行也失败,说明是JMeter本身的问题,比如jmx文件损坏、JMeter环境配置错误等。

4. 清理已存在的输出目录

JMeter的-o参数要求输出目录必须不存在,若之前运行过命令生成了example_visual文件夹,需先手动删除后再重新执行代码。

内容的提问来源于stack exchange,提问作者王纾林

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:18:29