簡體   English   中英

接收空指針異常

[英]Receiving a null pointer exception

我從我編寫的某些代碼中收到了空指針異常,我看不到異常的原因。 這是我的代碼:

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 ,但是它被checker = scan.findWithinHorizon(pattern, 0); 這似乎返回null

為了避免NullPointerException您應該在if語句中添加null檢查-

if(checker!=null && checker.equals("Array Start")){
   ...
}else{
   ...
}

scan.findWithinHorizon(pattern, 0)可能將null返回到checker3並且
在其上調用equals()會給您NullPointerException

如果要忽略此異常,請將條件更改為

 if("Array Size".equals(checker3)){
 }

checker3不等於"Array Size"並且checker3null ,這里的條件為false ,否則為true

在您的情況下, checker3 = scan.findWithinHorizon(pattern2, 300); 使它為null

如果checker3checker3則為null ,並且對引用null引用變量調用方法將導致NullPointerException

checker3 = scan.findWithinHorizon(pattern2, 300); 

我只能假設上面的代碼checker3 null值分配給checker3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM