java关闭窗口的代码 java关闭程序的代码
转载
开启和关闭exe程序的代码
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@Slf4j
public class ProcessController {
@RequestMapping("/open")
//通过cmd命令,开启程序
public String open() throws IOException {
ProcessBuilder process=createProcessBuilder("Code.exe","F:\\Visual Studio Code",null);
try {
Process proc = process.start();
//执行程序
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream(), "gbk"));
CmdGetter getter = new CmdGetter(br, proc);
getter.start();
} catch (Exception e) {
/// 只要可执行程序可执行就不会触发此异常,为以防万一特将异常内容写入文件
log.error("子线程错误");
}
return "hello Spring Boot 222";
}
@RequestMapping("/close")
//通过cmd命令,关闭程序
public String close(){
closeHistoryProgram("Code.exe");
return "hello yqy";
}
public void closeHistoryProgram(String processName){
String cmd = "taskkill /f /t /im "+processName;
try
{
//exec执行cmd命令
Process process = Runtime.getRuntime().exec(cmd);
//获取CMD命令结果的输出流
InputStream fis=process.getInputStream();
InputStreamReader isr=new InputStreamReader(fis,"GBK");
//使用缓冲器读取
BufferedReader br=new BufferedReader(isr);
String line=null;
//全部读取完成为止,一行一行读取
while((line=br.readLine())!=null)
{
//输出读取的内容
System.out.println( line );
}
}catch (IOException e)
{
e.printStackTrace();
}
}
private ProcessBuilder createProcessBuilder(String executable,String filePath, List<String> args) {
// 针对以.exe结尾的可执行文件 将先判断其是否存在
if ( !(FileUtil.exist(filePath+File.separator+executable))) {
throw new IllegalArgumentException("找不到对应可执行文件:" + executable);
}
List<String> cmd = new ArrayList<>();
cmd.add("cmd");
cmd.add("/c");
cmd.add(executable);
if (CollUtil.isNotEmpty(args)) {
cmd.addAll(args);
}
log.info("将执行的命令-->{}", cmd);
File dir = FileUtil.file(filePath);
log.info("命令执行的目录-->{}", dir.getAbsolutePath());
//directory的参数为工作路径
return new ProcessBuilder(cmd).directory(dir).redirectErrorStream(true);
}
}
开启程序后,获得程序返回的信息的代码
import lombok.Data;
import java.io.BufferedReader;
import java.util.ArrayList;
import java.util.List;
@Data
public class CmdGetter extends Thread {
private static CmdGetter nowGetter = null;
private BufferedReader br;
public static List<String> output;
private Process process;
public CmdGetter(BufferedReader br, Process p) {
this.br = br;
this.process = p;
}
@Override
public void run() {
nowGetter = this;
output = new ArrayList<>();
String line;
try {
while (process.isAlive() && (line = br.readLine()) != null) {
output.add(line);
if (output.size() >= 20) {
output.clear();
output.add(line);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
自己记录的一些笔记,内容如有不对请指正
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。