zoukankan      html  css  js  c++  java
  • [Java]在xp系统下java调用wmic命令获取窗口返回信息无反应(阻塞)的解决方案

    背景:本人写了一段java代码,调用cmd命令“wmic ...”来获取系统cpu、mem、handle等资源信息。在win7操作系统下运行没有问题,在xp系统下却发现读取窗口反馈信息时无反应(阻塞),但在cmd命令行窗口运行是没问题。经过多番查找,终于找到了解决方法。

    原代码:

    public static String getCmdReturn(String cmdcomand) {
                
                String CmdReturn="";
                String line=null;
                Runtime run = Runtime.getRuntime();
                String test="C://Windows//system32//wbem//wmic.exe process where ProcessId='6024' get ThreadCount";   //调试使用
                try {
                    Process process = run.exec(test);  //test为调试使用,原为cmdcomand入参         
                    BufferedReader  bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));    
                    while ((line = bufferedReader.readLine()) != null) {  
                        CmdReturn=CmdReturn+line;
                    }
                    bufferedReader.close();
                } catch (Exception e) {
                    e.printStackTrace();
                    // TODO: handle exception
                }
                return CmdReturn;
            }

    修改后的代码:

    public static String getCmdReturn_wmic(String exe, String cmdcomand)
                throws IOException {

            String CmdReturn = "";
            String line = null;
            BufferedReader br = null;
            InputStream is = null;

            String test1="wmic.exe";//调试使用

            String test2=" process where ProcessId='6024' get ThreadCount "//调试使用

            try {
                Process process = Runtime.getRuntime().exec(test1);//test1为调试使用,原为exe入参
                is = process.getInputStream();
                OutputStreamWriter ow = new OutputStreamWriter(
                        process.getOutputStream());
                ow.write(test2);//test2为调试使用,原为cmdcomand入参
                ow.flush();
                ow.close();
                br = new BufferedReader(new InputStreamReader(is));
                int linenum=1;

                while ((line = br.readLine()) != null) {
                    linenum=linenum+1;
                    if(linenum==5){
                        CmdReturn = CmdReturn + line;
                        break;
                    }
                    
                }

            } catch (Exception e) {
                e.printStackTrace();
                // TODO: handle exception
            } finally {
                br.close();
            }

            return CmdReturn;

        }

  • 相关阅读:
    二重积分与三重积分补充习题
    一二三章基础测试
    17. 继承之同名处理
    第二章 进程通信(五)
    16. 继承(一)
    15. 函数运算符重载及转换的知识点小结
    Hadoop基础-06-HDFS数据读写
    Hadoop基础-05-HDFS项目(词频统计)
    Hadoop基础-04-HDFS API编程
    Hadoop基础-03-HDFS(Hadoop Distributed File System)基本概念
  • 原文地址:https://www.cnblogs.com/whylaughing/p/7151367.html
Copyright © 2011-2022 走看看