【问题标题】:Java run command in ALREADY RUNNING CMD windowALREADY RUNNING CMD 窗口中的 Java 运行命令
【发布时间】:2011-06-06 09:17:26
【问题描述】:

我正在创建一个小程序,通过使用 GUI 来完成我的一些工作。 我现在拥有的是一个带有“开始”按钮的小程序,它可以启动一个基于 CMD 的应用程序。我需要做的是在该 CMD 窗口中输入某个命令。我想添加一个为我填写此命令的按钮。

这可能吗?

P.S.:CMD 是 Windows 的命令提示符。

谢谢大家。

【问题讨论】:

  • 我不相信您可以从 Java 应用程序控制 CMD 窗口。但是,您可以创建一个看起来像 CMD 窗口的窗口,它可以按照您想要的任何方式工作。

标签: java windows cmd command-prompt


【解决方案1】:

如果它是外部命令,则此方法有效:

String command = "cmd";   //Replace with your command
Runtime.getRuntime().exec(command);

如果它是一个内部命令,那么这将不起作用,但有一个解决方法:创建一个包含命令的批处理文件,并将一个带有批处理文件路径的字符串作为参数。

Runtime.getRuntime().exec("Temp.bat");

或者您可以使用此方法以编程方式编写批处理文件:

private void batch(String commands){
  try{
    String filename = "Temp.bat";
    File f = new File(filename);
    PrintWriter writer = new PrintWriter(f);
    writer.print(commands);
    writer.close();
    Runtime.getRuntime().exec(filename);

    long x = getTime + 3000;
    do{
      //Wait
    }while(getTime < x);

    f.delete();
  }catch(Exception ex){
    ex.printStackTrace();
  }
}

private long getTime(){
  SimpleDateFormat datef = new SimpleDateFormat("yyyyDDDHHmmssSSS");
  Date date = new Date();
  return Long.parseLong("" + datef.format(date));
}

【讨论】:

    【解决方案2】:

    这取决于您的基于 CMD 的应用程序如何接收其输入。

    如果它从 CMD 窗口的输入流中接收输入,这篇文章解释了如何获取输入流的引用并向其发送消息:Java exec - execute system processes with Java ProcessBuilder and Process

    如果您的 CMD 窗口正在运行不接受输入的命令,并且您想执行另一个命令,那么我认为您必须在单独的 CMD 进程中运行第二个命令。

    【讨论】:

    • CMD 从 C++ 应用程序获取输入。该应用程序是封闭源代码,因此我无法更改其中的任何内容。
    • C++ 应用程序是否从 CMD 命令行读取其输入?如果是这样,那么 Java Process Builder 方法应该可以正常工作。
    • C++(DLL 文件)打开一个 CMD 窗口以提供输出。因此 DLL 将其输出发送到 CMD 窗口。我想获取那个窗口的内容。如果我可以通过每隔 X 秒将内容保存到一个文本文件并让 Java 读取该文本文件来修改 DLL,那将很容易。嗯
    • 你可以像这样重定向程序的输出:
    猜你喜欢
    • 2013-08-09
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多