简体   繁体   English

我需要帮助弄清楚如何阻止我的程序抛出NullPointerException

[英]I need help figuring out how to stop my program from throwing a NullPointerException

I'm having this annoying issue of a null pointer exception being thrown when trying to run my program. 尝试运行我的程序时,我遇到了一个空指针异常的烦人问题。

This program I'm working on right now is another extension of a program I'm still working on. 我现在正在使用的程序是我仍在使用的程序的另一个扩展。

In this part, I just added a FileFilter, so for the most part the implementation should be the same. 在这一部分中,我仅添加了FileFilter,因此在大多数情况下,实现应相同。

Here is my code: 这是我的代码:

    import java.io.*;
    import java.util.*;

    public class DirectorySize extends DirectoryProcessor
    {


        /*
            Dan Czarnecki
            October 29, 2013

            Class variables:
                private HashMap<File, DirectoryStatistics> directory
                    A HashMap object that will contain the files and folders
                    within a directory

            Constructors:
                public DirectorySize(File startingDirectory) throws FileNotFoundException
                    Creates a DirectorySize object, takes in a pathname (inherited from DirectoryProcessor class,
                    and has a single hashmap of a DirectoryStatistics object to hold the files and folders
                    within a directory

            Methods:
                public void processFile(File file)
                    A method that searches for all the files and folders
                    within a directory and calculated the total size
                    for each of them
                public void run()
                    Calls the processFile() method and prints out
                    the files and folders (along with their sizes)
                    in the directory
                public String toString()
                    Returns each element in the directory Vector


            Modification History
                October 29, 2013
                    Original version of class
                    Implemented run() and processFile() methods
                October 30, 2013
                    Added implementation of FileFilter to processFile() method
            */
            private HashMap<File, DirectoryStatistics> directory;

            public DirectorySize(File startingDirectory, FileFilter fileFilter) throws FileNotFoundException
            {
                super(startingDirectory, fileFilter);
                directory = new HashMap <File, DirectoryStatistics>();
            }


            public void processFile(File file, FileFilter fileFilter) throws FileNotFoundException
            {
                DirectoryStatistics parent;
                int index;
                File parentFile;
                boolean find;
                boolean filter;

                if(fileFilter == null)
                {
                    System.out.println("null" + fileFilter);
                }

                if(file == null)
                {
                    System.out.println("null");
                }

                parentFile = file.getParentFile();
                parent = new DirectoryStatistics(parentFile, fileFilter);
                find = directory.containsValue(parent);
                filter = fileFilter.accept(file);

                if(find)
                {
                    directory.put(parentFile, parent);
                    if(filter)
                    {
                        directory.get(parentFile).setSizeInBytes(file.length());
                        directory.get(parentFile).incrementFileCount();
                    }

                }


                if(find)
                {
                    if(filter)
                    {
                        directory.get(find).addToSizeInBytes(file.length()); //increments the total size of the directory
                        directory.get(find).incrementFileCount(); //increments the number of files in the directory
                    }

                }


            }

            public void run() throws FileNotFoundException
            {
                File file;
                file = directoryLister.next();


                while(file != null) //the following will be called when the File object is not null
                {
                    processFile(file, fileFilter);
                    file = directoryLister.next();
                }

            }

            public String toString()
            {
                Set<File> parentFile = directory.keySet();
                File[] parentFileArray = parentFile.toArray(new File[0]);

                String str; //creates a new string that will hold the file or directory name
                str = "";

                for(int i = 0; i < parentFileArray.length; i++)
                {
                    str = str + directory.get(parentFileArray[i]).toString();
                }

                return str;
            }    
        }
import java.io.*;
import java.util.*;

public class FileNamesEndingWithFileFilter implements FileFilter
{
    /*
    Dan Czarnecki
    October 30, 2013

    Class variables:
        private String ending
            Tells the program to search for programs with
            certain extensions
        private boolean isCaseSensitive
            Tells the program if the file extension is
            case sensitive or not

    Methods
        public void FileNamesEndingWithFileFilter(String ending, boolean isCaseSensitive)

        public boolean accept(File file)

    */
    private String ending;
    private boolean isCaseSensitive;

    public FileNamesEndingWithFileFilter(String ending, boolean isCaseSensitive)
    {
        if(ending == null)
        {
            throw new IllegalArgumentException("null input");
        }

        ending = ending;
        isCaseSensitive = isCaseSensitive;
    }

    public boolean accept(File file)
    {
        String name;
        name = file.getName();

        if(isCaseSensitive)
        {
            return name.endsWith(ending);
        }

        else
        {
            name = name.toLowerCase();
            ending.toLowerCase();
            return name.endsWith(ending);
        }
    }
}

import java.io.*;

public class TestDirectoryListerPart7
{
    /*
    Dan Czarnecki
    October 29, 2013

    Class variables:
    N/A

    Constructors:
    N/A

    Methods:
        public static void main(String[] args) throws FileNotFoundException
            Performs the functions of the Directory Processing program,
            implementing the functions of the DirectoryProcessor,
            DirectorySize, and DirectoryStatistics classes

    Modification history:
        October 29, 2013
            Created class in which program will run in

    */
    public static void main(String[] args) throws FileNotFoundException
    {
        DirectoryProcessor directoryProcessor;
        File startingDirectory;
        FileFilter fileFilter;

        startingDirectory = new File("U:/MyWeb/Coursework/");
        fileFilter = new FileNamesEndingWithFileFilter("class", true);
        directoryProcessor = new DirectorySize(startingDirectory, fileFilter);

        System.out.println("Determining total number of bytes in each directory: " + startingDirectory);
        directoryProcessor.run();
        System.out.println(directoryProcessor);
    }
}

When running this program, the value for both the FileFilter and File inside my processFile() method are returning null pointer exceptions. 运行此程序时,我的processFile()方法中FileFilter和File的值都返回空指针异常。
Here is the detailed error message I am getting: 这是我收到的详细错误消息:

Exception in thread "main" java.lang.NullPointerException
    at DirectorySize.processFile(DirectorySize.java:71) (the call to my accept() method in my FileNamesEndingWithFileFilterClass)
    at DirectorySize.run(DirectorySize.java:106) (the call to my processFile() method)
    at TestDirectoryListerPart7.main(TestDirectoryListerPart7.java:37) (the call to my run() method in DirectorySize)

You are checking if fileFilter is null, if it is null you just print it to console and continue, trying to use that object later on. 您正在检查fileFilter是否为null,如果为null,则只需将其打印到控制台并继续,然后尝试使用该对象。 Naturally, it will throw a NullPointerException . 自然,它将抛出NullPointerException You may want to return in that if (or make sure you are not passing a null fileFilter to your processFile method). 如果(或者确保您没有将null fileFilter传递给processFile方法),则可能要返回该值。 Like this: 像这样:

if(fileFilter == null)
{
    System.out.println("I want a file filter!");
    return;
}

I think it is here. 我认为就在这里。 Where do you create directoryLister? 您在哪里创建directoryLister? It may be null 它可以为空

while(file != null) //the following will be called when the File object is not null
{
      processFile(file, fileFilter);
      file = directoryLister.next();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 需要帮助弄清楚如何在我的程序中添加“ q”退出 - need help figuring out how to put a 'q' quit into my program 需要帮助找出我的代码中的错误 - Need help figuring it out errors with my code 需要帮助弄清楚为什么我的 TestClock.java 程序出现 java.lang.StackOverflowError - Need help figuring out why I am getting a java.lang.StackOverflowError on my TestClock.java program 需要帮助弄清楚如何大写从文本文件中读取的任何小写“i” - Need help figuring out how to capitalize any lower case "i" read from a text file 需要帮助弄清楚为什么我单击启动时应用崩溃并停止播放视频的原因吗? - Need help figuring out why app crashes and stop video is called when I click to start it instead? 我正在我的 java class 中处理数据库,我需要帮助弄清楚如何更新数据库中的特定值/列 - I'm working on databases in my java class, and I need help figuring out how to update a specific value/column in the database 来自C,我需要一些帮助来弄清楚如何从输入字符串中最佳生成Chess-Bitmaps - Coming from C, I need some help figuring out, how to best generate Chess-Bitmaps from an input-string 我需要帮助弄清楚为什么清除按钮代码不起作用 - I need help figuring out why my clear button code does not work 我需要帮助找出我做错了什么 - I need help figuring out what i did wrong 需要帮助弄清楚如何确定最大和最小数量 - Need help figuring out how to determine biggest and smallest count
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM