2013-04-07 37 views
1

我有以下代碼:異常努力正則表達式匹配的ProcessBuilder輸出時

private void GetInfo(String src) throws IOException{ 

     Scanner scan = new Scanner(System.in);   
     String filename = new File(src).getName(); 

     ProcessBuilder builder = new ProcessBuilder("/Users/Daim/Desktop/process", src); 
     builder.redirectErrorStream(true); 
     Process process = builder.start(); 
     final InputStream is = process.getInputStream(); 

      new Thread(new Runnable() { 
       String line; 
       @Override 
       public void run() { 
        try { 
         BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
         while ((line = br.readLine()) != null) { 
          System.out.println(line); 
         } 

        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

        Pattern p = Pattern.compile("least"); 
        Matcher m = p.matcher(line); 

        //System.out.println("match"); 

       } 

      }).start(); 
    } 

獲得的,因爲 「匹配器M = p.matcher(線);」 異常:

Exception in thread "Thread-1" java.lang.NullPointerException 
    at java.util.regex.Matcher.getTextLength(Matcher.java:1234) 
    at java.util.regex.Matcher.reset(Matcher.java:308) 
    at java.util.regex.Matcher.<init>(Matcher.java:228) 
    at java.util.regex.Pattern.matcher(Pattern.java:1088) 
    at Wds$2.run(Wds.java:152) 
    at java.lang.Thread.run(Thread.java:722) 

爲什麼我我得到這個異常?我想這是因爲變量線路很忙?

回答

6

該行在循環後調用,當line爲空時。

Matcher m = p.matcher(line); 

您應該將此行添加到循環中。

3

您的while循環只會在line爲空時停止循環。

您不能致電matcher() null。