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

如何在Java程序中执行jps -l命令并获取输出,解决找不到文件报错

解决方案

错误原因

  • 系统找不到jps命令的执行路径:Runtime执行外部命令时读取的环境变量PATH可能未包含JDK的bin目录,无法定位到jps.exe
  • 命令参数解析错误:直接将带空格的整串命令传入exec()方法容易出现解析异常,部分写法中加入的start参数会新开独立窗口运行命令,当前进程无法捕获输出

可行实现方案

优先使用ProcessBuilder替代Runtime.exec(),兼容性和可控性更强,同时可以通过JDK自带的系统属性动态拼接jps的路径,避免写死路径的问题。

完整代码示例

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

public class JpsExecutor {
    public static void main(String[] args) {
        try {
            // 动态拼接jps路径,适配不同JDK安装位置
            String jpsPath = System.getProperty("java.home") + "/../bin/jps";
            // Windows系统补全.exe后缀
            String os = System.getProperty("os.name").toLowerCase();
            if (os.contains("win")) {
                jpsPath += ".exe";
            }
            
            // 数组形式传参避免空格解析错误
            ProcessBuilder pb = new ProcessBuilder(jpsPath, "-l");
            // 合并错误流到标准输出,避免缓冲区满导致进程阻塞
            pb.redirectErrorStream(true);
            Process proc = pb.start();
            
            // 读取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            
            // 等待命令执行完成,获取退出码
            int exitCode = proc.waitFor();
            System.out.println("命令执行完成,退出码:" + exitCode);
            
            reader.close();
            proc.destroy();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 如果不使用动态拼接路径,也可以直接传入jps的绝对路径,比如C:\\Program Files\\Java\\jdk1.8.0_301\\bin\\jps.exe,替换为本地实际的JDK路径即可
  • 不要使用cmd /c start或者powershell带启动新进程的参数,否则会导致输出无法捕获
  • 必须读取进程的输出流,否则缓冲区满会导致进程一直卡住无法结束

内容的提问来源于stack exchange,提问作者Jayesh Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:45:06