等待命令执行结束用waitFor(),其返回值就是命令的返回值
如果出现程序执行被挂起,没有任何反应的情况,是由于没有读取命令子进程的正常输出流或错误输出流导致缓冲区被占满,进程被锁住。这个时候需要把输出流中的内容给读出来。最好的做法是使用两个线程,分别同时读取正常输出流和错误输出流。
执行Windows平台上的命令时使用cmd.exe /C,如cmd.exe /C dir。
记得关闭命令子进程的输入流,通过Process.getOutputStream().close(),这样不会导致命令子进程被锁住。
仿照上面的文章,写了一个简单的例子:
Java代码
package cmd;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
class StreamDrainer implements Runnable {
private InputStream ins;
public StreamDrainer(InputStream ins) {
this.ins = ins;
}
public void run() {
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(ins));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class TestRunCmd {
public static void main(String[] args) {
String[] cmd = new String[] { "cmd.exe", "/C", "wmic process get name" };
try {
Process process = Runtime.getRuntime().exec(cmd);
new Thread(new StreamDrainer(process.getInputStream())).start();
new Thread(new StreamDrainer(process.getErrorStream())).start();
process.getOutputStream().close();
int exitValue = process.waitFor();
System.out.println("返回值:" + exitValue);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
NULL 博文链接:https://t42dw.iteye.com/blog/790855
如何在JAVA中调用windows_API
使用jinvoke.jar可以直接调用windows的api函数,如果用jni的话需要写c代码和参数转换
java调用windows apis 的实现 需要配置java环境变量
java可以调用windows的一些可执行文件,批处理呀之类的,这里是提供的一个例子
如何在JAVA中调用windows_API.doc 如何在JAVA中调用windows_API.doc
Linux环境下实现Java调用Windows环境下的Matlab函数
JAVA如何调用WINDOWS命令行 用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令
java 通过调用jacob 实现调用windows自带控件 实现文字转语音播放功能!
是java程序调用windows中的应该程序的例子, 大家可以可以参考一下.
有时候,JAVA程序需调用本地的批处理进行一些处理,下面的代码就演示了如何在JAVA中调用本地的批处理文件
之前做POS机用到的就整理了一下,文件已按jdk目录分配好,把文件放入jdk中的相应文件夹中即可,自己做个备份。
Java调用windows本地API,或者是c、c++等语言写的动态链接库。第一次见识。值得学习。
java 如何调用系统打印机打印文件,也是从别人借鉴过来,免费的
java 操作windows 共享目录方法介绍
1、Labview生成Dll文件 2、Java通过Jnative第三方Jar包调用Labview生成的DLL文件 3、Java在Windows系统调用Labview生成的Dll的说明 有JNative的使用说明 直接下载,根据使用说明可以直接使用。
Java调用Win API:SUN官方提供的JNI调用时还要自己生成头文件,对已有的DLL再次进行封装。需要对C++非常熟悉,因为要写C++代码。不过还好还有另一种解决方案——Jawin
windows下java处理视频的源码,功能有,获取视频格式转码、视频缩略图截取、视频切割、获取视频相关信息等。与“windows下java调用ffmpeg视频处理环境搭建”配套使用。
java调用本地dll的几种方法性能对比测试。 JNA消耗的总时间(ms):5406 bridj消耗的总时间(ms):984 JNI消耗的总时间(ms):47 包含c++源码和java源码,部署和使用方法。在win7和winxp下测试用过。 部分源码是...