java 程序打开和关闭exe程序问题总结

花了两天的时间研究关于java程序打开一个外部的exe程序,关闭已经打开的exe进程的问题,总结如下:

场景:开发一个可视化窗口,两个按钮,启动,关闭。对两个按钮实现MouseListener接口,在鼠标按下按钮时执行操作。以下就是这两个按钮的功能。

启动:

Runtime.getRuntime().exec("E:/myClient/punchClient.exe");//启动.exe文件的方法

Runtime.getRuntime().exec("cmd.exe /c start c://example.exe");也是方法之一。

由于本功能只是启动一个项目,并没有其他操作,所以未声明Process 来接收返回值。似乎,打开一个exe文件变得很简单,至于Runtime的用法,以及exec方法的用法,可以百度下,不再多说。

关闭:

对于如何在一个java程序里关闭一个exe的进程,搜遍百度,归纳如下:

taskkill--window linux下用kill 执行该操作的用户必须有kill命令权限

对于taskkill 如果再cmd窗口执行该命令提示不是内部命令,而在windows\system32中双击可以的话,那加入完整路径试试吧。

String command = "cmd.exe /c c:\\windows\\system32\\taskkill /f /im  punchClient.exe";

Process proc =Runtime.getRuntime().exec(command);

这里taskkill的参数意思就不介绍了。

这种方式在我的java环境里运行失败。接下来试试下面这种:

 Runtime.getRuntime().exec("tskill punchClient"); 测试成功

注意这里是tskill 进程名称不带.exe,带了就不行的哦。

tskill PID/ProcessName

既然这样,查找进程列表,取其PID ,试试

Runtime.getRuntime().exec("tskill 5036"); 也成功,

 

还有一种方法:

Runtime.getRuntime().exec("cmd.exe /c c:\\windows\\system32\\taskkill /f /pid  5036");测试成功

由于我的path的问题,这里必须是完整路径。

 

另外:获取PID的方法  关键代码如下

 

Process listprocess = Runtime.getRuntime().exec("cmd.exe /c tasklist");

InputStream is = listprocess.getInputStream();

byte[] buf = new byte[256];

BufferedReader r = new BufferedReader(new InputStreamReader(is));

StringBuffer sb = new StringBuffer();

String str = null;

while ((str = r.readLine()) != null) {

 String id = null; 

Matcher matcher = Pattern.compile(programName + "[ ]*([0-9]*)").matcher(str); 

while (matcher.find()) {  

if (matcher.groupCount() >= 1) {   

id = matcher.group(1);   

if (id != null) {   

 Integer pid = null;    

try {     

pid = Integer.parseInt(id);    

} catch (NumberFormatException e) {    

 e.printStackTrace();   

 }   

 if (pid != null) {     

Runtime.getRuntime().exec("cmd.exe /c taskkill /f /pid " + pid);     

System.out.println("kill progress");   

 }  

 }  

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhouyiddd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值