Springboot启动Windows程序的方法-核心代码

本文介绍了如何在SpringBoot应用中使用ProcessBuilder来启动和关闭Windows下的exe程序,强调了及时处理子进程输出信息的重要性,并展示了具体代码实现,包括创建Controller层的方法以及前端Vue3的按钮交互。同时,文中还涉及了CMD命令的使用以及线程处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         目前java提供两种方式调用Windows下的其他exe程序, Runtime和ProcessBulider。原理相同,同时通过执行类似cmd命令的方式启动和关闭程序。两种方法都会返回一个用于管理操作系统进程的Process对象,最终生成的Process子进程独立于Jvm之外,就算没有对象应用指向它,也不会被GC关闭或者释放。

        创建子进程Process后,要及时取走子进程输出信息和错误信息,否则很可能因为信息太多导致子进程阻塞。

        这里我就以ProcessBulider为例,介绍一下Springboot代码中如何实现其功能。

        ProcessBuilder是java 5.0引入的,start()方法返回Process的一个实例。创建Controller层代码,只要实现两个方法,开启程序的startEXE()方法和关闭程序的closetEXE()方法:

@RestController
@Slf4j
@RequestMapping("/test")
public class ProcessController {
	
	@RequestMapping("/start")
    //通过cmd命令开启exe程序
    public String startEXE() throws IOException {
		log.info("Line[" + Thread.currentThread().getStackTrace()[1].getLineNumber() + "] :start cuteftppro.exe");
        ProcessBuilder process=createProcessBuilder("cuteftppro.exe","D:\\yaken\\Program Files\\CuteFTP9",null);
        try {
            Process proc = process.start();
            //执行程序
//            BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream(), "gbk"));
//          SequenceInputStream是一个串联流,能够把两个流结合起来,可以将getInputStream和getErrorStream获取到的流一起查看
            BufferedReader br = new BufferedReader(new InputStreamReader(new SequenceInputStream(proc.getInputStream(), proc.getErrorStream()), "gbk"));
            CmdGetter cg = new CmdGetter(br, proc);
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值