代码之家  ›  专栏  ›  技术社区  ›  Omid

尝试Regex匹配Processbuilder输出时出现异常

  •  1
  • Omid  · 技术社区  · 13 年前

    我有以下代码:

    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();
        }
    

    由于“Matcher 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)
    

    为什么我会得到这个例外?我想是因为变量行忙吗?

    2 回复  |  直到 13 年前
        1
  •  6
  •   BobTheBuilder    13 年前

    line 为null。

    Matcher m = p.matcher(line);
    

    您应该将这一行添加到循环中。

        2
  •  3
  •   SLaks    13 年前

    你的 while 循环将仅在以下情况下停止循环 line 为null。

    你不能打电话 matcher() 为null。