Java如何启动CMD并使其保持与用户交互的状态?

时间:2018-12-14 19:38:36

标签: java cmd console processbuilder attachedbehaviors

我正在努力解决以下问题:我正在尝试构建一个应用程序,该应用程序在运行时会打开一个CMD窗口(用户可见),并附加到该窗口的输入和输出(因此它的功能类似于应用程序的控制台)。因此,如果用户在CMD窗口中键入内容,则例如可以使用Scanner(System.in)进行拾取,而当我执行System.out.println时,它将显示在CMD窗口中。

我知道一个人可以简单地从CMD运行.jar文件并像这样附加它,但这不是我想要的。我希望.jar自己打开一个CMD窗口,并将其用作控制台(用户可见)。

期待一些建议:)

1 个答案:

答案 0 :(得分:1)

在Poohl的建议下,我提出了以下解决方案:

在不带参数的情况下启动.jar时,它将自动在同一文件夹中查找.bat文件“ launcher.bat”,并通过CMD进程启动该文件:

    if(args.length > 0 && args[0].equals("ATTACH") {
        // Execute command-line program....
    } else {
        ArrayList<String> commands = new ArrayList<>();
        commands.add("cmd.exe");
        commands.add("/c");
        commands.add("start");
        commands.add("cd " + new File("").getAbsolutePath()); // cd to classpath
        commands.add("launcher.bat"); // The launcher that is in classpath

        ProcessBuilder pb = new ProcessBuilder(commands);

        Process p = pb.start();
    }

.bat文件包含以下语句:

java -jar LineCounter.jar ATTACH

结果是,使用processbuilder打开的cmd窗口将再次打开bat文件,该文件将打开.jar文件并保持附加状态。