易截截图软件、单文件、免安装、纯绿色、仅160KB

Java调用WMIC命令的方法

    今天要写个远程重启服务的功能,为了开发速度,暂时定为Java代码+WMIC命令的方法,简单的说,就是利用Java调用本机应用程序的方法。涉及到的Java类有java.lang包里面的Runtime、Process、ProcessBuilder三个类,以及wmic中重启服务的命令。因为之前也写过这方面的东西,所以很习惯性的写出了代码:
  Process p = Runtime.getRuntime().exec("wmic ...");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String tmp = null;

while ((tmp = br.readline()) != null) {
System.out.println(tmp);
}
int exitValue = p.waitfor();
    运行,结果发现程序不能退出,Debug发现程序阻塞在br.readline()中了,强制结束程序,发现重启服务的命令正常下下去了,去掉程序中获得标准输出的地方和获得返回结果的地方,命令也能正常下去,而且正常退出。
    为什么程序会阻塞呢?Google了一下,发现了大家的解释,应该也是比较权威的解释吧:每个进程都有自己的标准输入、标准输出、标准错误输出,对于某些依赖于OS的进程,可能其输出缓冲区很小,如果不能及时的读出(标准输出、标注错误输出),将导致进程不能正常退出。我的程序中标准输出已经读了,显然原因不是这个,难道是错误输出缓冲区中的数据没有读出导致的?带着这个疑问,对程序作了一些更改:
ProcessBuilder pb = new ProcessBuilder("wmic",...);
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String tmp = null;

while ((tmp = br.readline()) != null) {
System.out.println(tmp);
}
int exitValue = p.waitfor(); 
    编译运行,发现还是有问题,依然还是阻塞。又google了一下,大家的评论大多还是关于标准输出和标准错误输出,那这程序应该是没有问题了。后来在cmd中敲入wmic的命令,发现wmic命令敲入以后会进入一个自有的提示符中,难道是因为标准输入的问题。后来又google了一下,验证了我的猜想,果然是因为wmic进程会等待标准输入,而程序中没有处理标准输入的地方,是标准输入阻塞了进程的退出,修改代码:
ProcessBuilder pb = new ProcessBuilder("


相关文档:

一个简单java小程序打包成EXE运行文件

在博客园上看到这样的代码,把它打包成一个exe文件
public class Test
{
    public static void main(String[] args)
    {
        String str="C:\\Program Files\\Tencent\\TM2009\\Bin\\TM.exe";
        ......

Java Observer Pattern

查看最新精华文章 请访问博客首页相关文章 通用高校排课算法研究----前言java clone详解全面深入介绍C++字符串:string类云计算导论FreeMarker笔记苍鹰-GISRen漫话GIS林氏物语.朝花夕拾之恨逢卿晚武汉竟升公司 WebSphere Portal 内容管理升级实施方案 ......

Java手册中java.util.Random的描述,随机数产生算法


java.util
类 Random
java.lang.Object

java.util.Random
所有已实现的接口:

Serializable
直接已知子类:

SecureRandom
public class Random
extends Object
implements Serializable
此类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 Donald Knuth 的 ......

JAVA读取ini文件的一个类,存着以备后用!

package com.qiao.java;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Iter ......

Zlib压缩算法在java上的应用

JAVA实现
  在JDK中,在java.util.zip包中已经内置了ZLIB的实现,示例代码如下:
1//解压
2 public String decompressData(String encdata) {
3 try {
4 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
5 InflaterOutputStream zos = new InflaterOutputStream(bos); 
6 zo ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号