需求:用java程序调用windows的cmd命令,然后运行npm run serve,能启动node.js程序
试过很多方法都不行,虽然能成功运行执行npm命令,但启动后访问浏览器没反应,后来想到用start命令启动一个新窗口,从而解决问题。
例子只适用windows
1、目录结构
D:\t\demo1\demo1下是node.js项目
在这里运行npm run serve能启动程序
在浏览器上输入http://localhost:8080/也能访问
2、创建run.bat
在该目录下创建run.bat,内容只有如下一行内容:
npm run serve
3、java代码
package com.example.test.command;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) throws IOException, InterruptedException{
String destFolder="D:\\t\\demo1\\demo1";
System.out.println(destFolder);
File jsFile=new File(destFolder);
String cmdPrompt="cmd";
String type="/c";
String start = "start";
String bat="run.bat";
List<String> updateCommand=new ArrayList<String>();
updateCommand.add(cmdPrompt);
updateCommand.add(type);
updateCommand.add(start);
updateCommand.add(bat);
runExecution(updateCommand,jsFile);
}
public static void runExecution(List<String> command, File navigatePath) throws IOException, InterruptedException{
System.out.println(command);
ProcessBuilder executeProcess=new ProcessBuilder(command);
executeProcess.directory(navigatePath);
Process resultExecution=executeProcess.start();
BufferedReader br=new BufferedReader(new InputStreamReader(resultExecution.getInputStream()));
StringBuffer sb=new StringBuffer();
String line;
while((line=br.readLine())!=null){
sb.append(line+System.getProperty("line.separator"));
}
br.close();
int resultStatust=resultExecution.waitFor();
System.out.println("Result of Execution"+(resultStatust==0?"\tSuccess":"\tFailure"));
}
}
最关键的是增加了start命令,这样就能新开启一个窗口
4、运行效果如下:
运行代码后,会自动启动一个新窗口,这样就跟用手动输入命令的效果一样