用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现。下面是一种比较典型的程序模式:

Process   process   =
  Runtime.getRuntime().exec( ".//p.exe ");

process.waitfor(   );

在上面的程序中,第一行的“.//p.exe”是要执行的程序名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的等待子进程完成再往下执行。

但在windows平台上,如果处理不当,有时并不能得到预期的结果。下面是笔者在实际编程中总结的几种需要注意的情况:

1、执行DOS的内部命令

如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。例如,执行dir命令,在NT上,
  可写成exec( "cmd.exe   /c
  dir "),在windows  
95/98下,可写成“command.exe   /c  
dir”,其中参数“/c”表示命令执行后关闭Dos立即关闭窗口。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序中写成exec(
"my_dir.bat ")。如果仅仅写成exec( "dir
"),Java虚拟机则会报运行时错误。前一种方法要保证程序的可移植性,需要在程序中读取运行的操作系统平台,以调用不同的命令解释器。后一种方法则不需要做更多的处理。

2、打开一个不可执行的文件

打开一个不可执行的文件,但该文件存在关联的应用程序,则可以有两种方式。  
以打开一个word文档a.doc文件为例,Java中可以有以下两种写法:

exec( "start   .//a.doc ");

exec( "   c://Program  
Files//Microsoft   Office//office//winword.exe
  .//a.doc ");

显然,前一种方法更为简捷方便。

3、执行一个有标准输出的DOS可执行程序

在windows平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor(
 
)。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。一段典型的程序如下:

String   ls_1;

Process   process   =
  Runtime.getRuntime().exec( "cmd
  /c   dir  
//windows ");

BufferedReader   bufferedReader  
=   new   BufferedReader(
  /

new   InputStreamReader(process.getInputStream());

while   (  
(ls_1=bufferedReader.readLine())   !=
  null)

System.out.println(ls_1);

process.waitfor(   );

转自:http://blog.csdn.net/legendmohenote/article/details/5828455

最新文章

  1. iOS block
  2. 深入理解DOM事件机制系列第三篇——事件对象
  3. Spearman秩相关系数和Pearson皮尔森相关系数
  4. final关键字
  5. 自定义Dialog之信息提示
  6. WPS 文字排版 标题回车后标题号自动增加
  7. mount挂载
  8. Codeforces Round 190 div.2 322C 321A Ciel and Robot
  9. HDOJ 1020 Encoding
  10. zTree市县实现三个梯级数据库映射
  11. js创建xml对象
  12. multisim页面设置
  13. touchweb网站常见问题,手机网站注意问题
  14. Zabbix-2--安装--LAMP/LNMP详细总结
  15. easyui 功能介绍
  16. day27-反射
  17. idea 没有智能提示
  18. linux,添加新硬盘的方法
  19. IP数据库
  20. 微信小程序开发1_资料收集

热门文章

  1. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:11.定制化Log输出
  2. SQL Server(第二章) 字符串函数、日期时间函数、转换函数
  3. 国密SM4分组加密算法实现 (C++)
  4. java Vamei快速教程16 RTTI
  5. win10安装mac系统
  6. http头部信息学习
  7. Java 发送邮件工具类
  8. 分词,复旦nlp,NLPIR汉语分词系统
  9. strong和weak
  10. XML字符串解析