我有一个名为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.
错误可能在哪里?
答案 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
环境变量中。