【问题标题】:Java - Execute External Windows Applications?Java - 执行外部 Windows 应用程序?
【发布时间】:2016-06-25 02:43:48
【问题描述】:

我不确定如何通过 Java 代码启动外部应用程序(特别是在 Windows 上)。我不打算在 Mac/Linux 上使用这个 Java 代码,所以让我们专注于 Windows 代码。

我做了什么

这两天我一直在研究这个问题,但我仍然没有找到答案。我很容易找到了Runtime.getRuntime().exec() 方法,但问题是我在 IntelliJ Idea 中找不到关于从我的本地工作区启动批处理 (.bat) 文件的信息。。 p>

我在问什么

我只想知道如何在我的工作区中执行本地批处理文件(在com.example.batch 之类的文件夹中)和/或如何执行 (.exe) 或 (.bat ) 带有直接文件地址。 (例如,Windows碎片整理和优化驱动器 (.exe):C:\WINDOWS\system32\dfrgui.exe)

在此先感谢大家,我一直渴望得到这个答案。

【问题讨论】:

标签: java windows batch-file intellij-idea executable


【解决方案1】:

首先,您应该使用ProcessBuilder 执行外部程序,以获得比Runtime.getRuntime().exec() 更易于使用的界面。

其次,要执行.bat 文件,您所要做的就是执行cmd.exe 并在/C 选项中传递批处理文件名。请注意,当您运行批处理文件时,您正在启动 DOS cmd 处理器并告诉它运行批处理文件而不是从终端读取。因此,批处理文件必须位于cmd.exe 可以访问的位置。因此,它不能位于包含您的 Java 程序的 jar 文件中。如果需要将其分发到 jar 中,则必须将其复制到某个文件系统中。

【讨论】:

  • (关于第二个选项)这可以让我从项目工作区启动 .bat 吗?
【解决方案2】:

你读过基本的Runtime.exec() article吗?

本文的第 2 页列出了一个常见的陷阱:Runtime.exec() 不是命令行

.bat 文件不是可执行文件。它们是指令的集合。就像 Linux 中的 shell 脚本一样,您需要一些东西来实际执行这些指令。

在这种情况下,您的可执行文件是cmd.exe,它将以/Ccom.example.batch 作为其参数:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"});

作为旁注,请查看 ProcessBuilder 类。它比Runtime 好得多。是的,Runtime 文章中的所有规则都适用于ProcessBuilder

【讨论】:

  • 很好的答案。我选择它是因为您专注于一个您提供完整细节的主题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2012-12-09
相关资源
最近更新 更多