• [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;

        }

  • 相关阅读:
    【译】第九篇 Integration Services:控制流任务错误
    【译】第九篇 Replication:复制监视器
    【译】第八篇 Replication:合并复制-How it works
    【译】第七篇 Replication:合并复制-订阅
    【译】第六篇 Replication:合并复制-发布
    【译】第五篇 Replication:事务复制-How it works
    【译】第四篇 Replication:事务复制-订阅服务器
    SVG格式图片转成HTML中SVG的Path路径
    纯css隐藏移动端滚动条解决方案(ios上流畅滑动)---转载
    金额格式化,例子:fmoney("12345.675910", 3),返回12,345.676
  • 原文地址:https://www.cnblogs.com/whylaughing/p/7151367.html
Copyright © 2020-2023  润新知