有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java命令提示符仿真器

我正在尝试制作一个通过cmd命令的java程序。exe并打印其输出。为此,我使用以下代码:

cmdLine = Runtime.getRuntime().exec("cmd.exe");
cmdLineOut = new BufferedReader(new InputStreamReader(cmdLine.getInputStream()));
cmdLineIn = new PrintWriter(cmdLine.getOutputStream());
// ...
cmdLineIn.println(command);
cmdLineIn.flush();
String s = null;
while ((s = cmdLineOut.readLine()) != null)
    System.out.println(s);

尽管如此,当输入给定时,输出永远不会打印

编辑:已解决 cmdLineOut。readLine()在输入为空时不返回null,它会冻结。由于readLine在最后冻结,没有其他代码被执行,所以我只是将readLine的打印放在一个单独的线程中

如果有人想更好地回答这个问题,那就去吧


共 (1) 个答案

  1. # 1 楼答案

    你从来没有真正执行过用户的命令,至少在你发布的代码片段中是这样。此外,几乎所有命令提示符“命令”实际上都只是默认程序搜索路径上的程序。对于每个命令,您可能只需要Runtime.getRuntime().exec(user_command)。这意味着您必须像为每个命令所做的那样设置输入和输出流。在单独的线程中获取输入是正确的,因为尝试读取输入将阻止当前线程,直到有真正的输入要读取。 然而,有些命令,即使在UNIX或Linux系统下,也是“内置的”(如cd),这意味着命令提示符(又名“shell”)在内部处理这些命令。您的程序必须测试用户输入,以查看他们是否在调用内置命令,并专门处理对内置命令的调用。你的程序应该可以移植到非Windows计算机上。当然,用户会使用不同的命令(cp而不是copy),但您需要添加的唯一部分是处理其他操作系统的shell内置列表(或者简单地让您的程序实现一组“跨平台”的内置-这是您的shell程序,您可以制定规则)