如何从我的 java 程序执行 zookeeper-server-start .bat 文件?

How to execute zookeeper-server-start .bat file from my java program?

我正在尝试从我的 java 代码启动 zookeeper 和 kafka 服务器。我们通常手动执行批处理文件,我正在尝试自动化,但服务器永远不会启动。

我已经尝试 运行 使用相同的代码连接其他 .bat 文件,它们 运行 很有魅力,但 zookeeper 和 kafka-server 的文件从未成功执行,也没有抛出任何错误

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/zookeeper-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/zookeeper.properties"});

我希望 zookeeper 服务器启动并保持启动状态,但它没有。请帮助我哪里出错了,这可能吗?

下面的程序对我有用,它会将所有日志打印到控制台并等待进程终止:

import java.io.*;
public class ExecuteProg {
    public static void main(String[] args) {
        try {
            Process p = Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c",
                    "E:/Softwares/kafka_2.11-2.0.0/bin/windows/zookeeper-server-start.bat",
                    "E:/Softwares/kafka_2.11-2.0.0/config/zookeeper.properties"});
            BufferedReader in = new BufferedReader(
                                new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我完全不知道为什么,但添加 "start" 标志使它对我有用。现在我可以从代码中 运行 zookeeper 和 kafka 服务器。我使用的代码如下,

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "start",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/zookeeper-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/zookeeper.properties"});

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "start",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/bin/windows/kafka-server-start.bat",
    "C:/kafka_2.11-2.1.0/kafka_2.11-2.1.0/config/server.properties"});