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;

        }

  • 相关阅读:
    微分方程、动力系统与混沌导论 第1章 一阶方程[书摘]
    微分方程解耦
    指数输入时微分方程特解的求法
    例说信号与系统
    SVD分解的理解[转载]
    3D数学 ---- 矩阵和线性变换[转载]
    千里积于跬步——流,向量场,和微分方程[转载]
    微分方程——包络和奇解
    微分方程——基本概念和常微分方程的发展史
    sencha touch 入门学习资料大全
  • 原文地址:https://www.cnblogs.com/whylaughing/p/7151367.html
Copyright © 2011-2022 走看看