Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-执行外部Windows应用程序?_Java_Windows_Batch File_Intellij Idea_Executable - Fatal编程技术网

Java-执行外部Windows应用程序?

Java-执行外部Windows应用程序?,java,windows,batch-file,intellij-idea,executable,Java,Windows,Batch File,Intellij Idea,Executable,我不确定如何通过Java代码启动外部应用程序(特别是在Windows上)。我不打算在Mac/Linux上使用这段Java代码,所以让我们把重点放在Windows代码上 我所做的 过去两天我一直在研究这个问题,但仍然没有找到答案。我很容易找到Runtime.getRuntime().exec()方法,但问题是我在IntelliJ Idea的本地工作区中找不到有关启动批处理(.bat)文件的信息 我在问什么 我只想知道如何在我的工作区中执行本地批处理文件(在com.example.Batch这样的文

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

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

我在问什么 我只想知道如何在我的工作区中执行本地批处理文件(在
com.example.Batch
这样的文件夹中)和/或如何使用直接文件地址执行(.exe)或(.bat)。(例如,Windows的碎片整理和优化驱动器(.exe):
C:\Windows\system32\dfrgui.exe


多亏了前面的一切,我一直渴望得到这个答案。

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


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

您阅读了essential吗

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

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

本例中的可执行文件是
cmd.exe
,它将以
/C
com.example.batch
作为参数:

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

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

您是否尝试过类似的答案?(关于第二个选项)这是否允许我从项目工作区启动.bat?回答很好。我选择它是因为你专注于一个你给出了完整细节的主题。谢谢