1

我正在编写一个简单的代码,它使用 java 中的任务列表仅显示控制台”类型的进程的名称

由于此代码中的字符串索引越界错误,我无法这样做。我使用了索引 36 到 43,因为在这些代码中,我在输出代码期间获得了进程类型,我们使用任务列表打印所有进程。进程名称的 0 到 30 也是如此。

请帮我解决一下这个。

import java.io.*;
 public class process_name
  {
    public static void main(String []args)
     {
        try {
             int i;
              String line,pn,pt;
              pn="";
              Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");

              BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while ((line = input.readLine()) != null)
            {
              pt=line.substring(36,43);
              if(pt.equals("Console")) 
              {
                 pn=line.substring(0,30);
                 System.out.println(pn);
              }
              System.out.println();
             }
        input.close();
       }
     catch (Exception err) 
     {
       err.printStackTrace();
     }
}

}

4

3 回答 3

2

尝试检查该行的长度。它可能不够长,这会导致越界错误,因为它不够长。

 System.out.println(line.length());

或者您可以在通话前检查线路的长度

 if (line.length() >= 43){
 ....
于 2019-11-30T10:28:30.400 回答
0

我可以看到,tasklist 在开头打印一个空行。一个简单的检查将if (!line.contains("Console")) continue;在 while 循环的开始。这样,您将跳过不包含字符串 Console 的每一行。

于 2019-11-30T10:38:14.030 回答
0

只是为了避免索引超出范围,我应该首先检查当前行是否包含单词“Console”并检查长度:

import java.io.*;
 public class Main
  {
    public static void main(String []args)
     {
        try {
             int i;
              String line,pn,pt;
              pn="";
              Process p = Runtime.getRuntime().exec(System.getenv("windir") +"\\system32\\"+"tasklist.exe");


              BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while ((line = input.readLine()) != null)
            {
               if(line.contains("Console"))
               {
                   if(line.length()>30){
                   pn=line.substring(0,30); System.out.println(pn);}
            }
              System.out.println();
             }
        input.close();
       }
     catch (Exception err) 
     {
       err.printStackTrace();
     }
}}
于 2019-11-30T10:40:11.663 回答