1

我有以下代码:

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(line);”而出现异常:

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)

为什么我会收到此异常?我猜是因为变量线路很忙?

4

2 回答 2

6

此行在循环后调用,当line为空时。

Matcher m = p.matcher(line);

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

于 2013-04-07T14:10:30.567 回答
3

您的while循环只会在line为空时停止循环。

你不能调用matcher()null。

于 2013-04-07T14:10:46.607 回答