Java 接收空指针异常

Java 接收空指针异常,java,if-statement,nullpointerexception,Java,If Statement,Nullpointerexception,我从我编写的一些代码中收到一个空指针异常,我看不出异常的原因。这是我的代码: import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; public class SearchingFilesMain { public static void main(String[] arg) { int chec

我从我编写的一些代码中收到一个空指针异常,我看不出异常的原因。这是我的代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class SearchingFilesMain {

public static void main(String[] arg) {

    int checker4 = 0;
    String checker3 = "";
    String checker2 = "";
    String checker1 = "";
    String checker = "";

    try {
        Scanner scan = new Scanner(new BufferedReader(new FileReader(
                "C:\\Users\\User\\Desktop\\asciiTracks.txt")));

        while (checker != null) {

            String pattern = "Array Start";
            checker = scan.findWithinHorizon(pattern, 0);

            if(checker.equals("Array Start")){

                String pattern2 = "Array Size";
                checker3 = scan.findWithinHorizon(pattern2, 300);
                System.out.println(checker3);

                if(checker3.equals("Array Size")){                      
                    checker4 = Integer.parseInt(scan.findInLine("(10000|\\d{1,4})"));
                    System.out.println(checker4);


                }else{System.out.println("no array size");}
        System.out.println(checker4);
    }else{System.out.println("no array size");}}}catch (FileNotFoundException e) {}}}
这是我在控制台上看到的错误:

Exception in thread "main" java.lang.NullPointerException
at SearchingFilesMain.main(SearchingFilesMain.java:31)
此错误发生在代码的这一行:

if(checker3.equals("Array Size")){
这对我来说毫无意义,因为如果checker3不等于文本,它只会移动到else语句并从那里开始,而不是抛出null指针异常并停止程序?我这样想是不是错了

有人知道为什么会这样吗

在您的情况下,checker3=scan.findWithinHorizonPattern2300;使其为空


如果checker3未初始化,则它将为null,并且对引用null的引用变量调用方法将导致NullPointerException。

虽然您已使用空字符串初始化checker3,但checker=scan.findWithinHorizonpattern,0;它似乎返回空值

为了避免NullPointerException,您应该在if语句中添加null检查-

if(checker!=null && checker.equals("Array Start")){
   ...
}else{
   ...
}
scan.findWithinHorizonpattern,0可能会将null返回到checker3和 对其调用equals会给您带来NullPointerException

如果要忽略此异常,请将条件更改为

 if("Array Size".equals(checker3)){
 }
这里,当checker3不等于数组大小时,条件为false,当checker3为null时,条件为false,否则为true


我只能假设上面的代码行为checker3分配了一个空值。

好的,但是为什么checker3没有初始化呢?它应该在整个while语句之前初始化。它在while循环之前初始化为空字符串,但在while循环中,对findWithinHorizon的调用返回null请使用checker3检查它从checker3=scan获取null值。findWithinHorizon模式2300;好的,谢谢,是的,我意识到它正在返回null,因为这正是它应该返回的,但我看不出它是如何抛出null指针异常的。感谢您的澄清:DArray Start.equalschecker更简洁,因为不需要显式检查null。
checker3 = scan.findWithinHorizon(pattern2, 300);