在Java应用程序中执行批处理文件时出现问题

时间:2010-09-10 22:32:40

标签: java batch-file

我有一个名为run.bat的批处理文件,其中包含以下代码:

@echo off
REM bat windows script
set CXF_HOME=.\lib\apache-cxf-2.2.7
java -Djava.util.logging.config.file=%CXF_HOME%\logging.properties -jar archiveServer-0.1.jar

当我在命令行上执行此文件时,它可以正常工作。但是,当我尝试使用以下语句在java文件中执行时:

File path = new File("C:/Documents and Settings/Zatko/My Documents/Project-workspace/IUG/external/application/archive");    

Runtime.getRuntime().exec(new String[]{"cmd.exe", "/C", "start", "run.bat"}, new String[]{}, path);

我在终端窗口中收到以下错误:

'java' is not recognized as internal or external command, operable program or batch file.

错误可能在哪里?

2 个答案:

答案 0 :(得分:2)

在PATH中找不到Java.exe。

如果您可以假定已定义JAVA_HOME变量,则可以修改批处理文件:

%JAVA_HOME%\bin\java -Djava.util.logging.config.file=%CXF_HOME%\logging.properties -jar archiveServer-0.1.jar

正如staker建议的那样,更好的方法是将PATH环境变量设置为包含%JDK_HOME%\ bin

File workingDirectory = new File("C:/Documents and Settings/Zatko/My Documents/Project-workspace/IUG/external/application/archive");    
String javaProgram = System.getProperty("java.home") + "\bin";
String[] command = {"cmd.exe", "/C", "start", "run.bat"};
String[] environment = {"PATH=" + javaProgram};
Process process = Runtime.getRuntime().exec(command, environment, workingDirectory);

作为第三个选项,您还可以通过直接调用jar的main类来避免使用批处理文件。但是,archiveServer将在同一进程中运行。也许这不是你想要的。

答案 1 :(得分:1)

我认为您没有将JAVA_HOME/bin添加到PATH环境变量中。