Java 对空指针异常的帮助

Java 对空指针异常的帮助,java,nullpointerexception,Java,Nullpointerexception,我试图从一个txt文件返回一些关于基于工资的员工的变量,代码将被编译,但不会打印出来。 这就是我目前在项目中所做的: public class PayrollPreparation { private File source; private Scanner input; private String payrollType; private int employeeID; private String employeeName; private

我试图从一个txt文件返回一些关于基于工资的员工的变量,代码将被编译,但不会打印出来。 这就是我目前在项目中所做的:

public class PayrollPreparation {

    private File source;
    private Scanner input;
    private String payrollType;
    private int employeeID;
    private String employeeName;
    private int hoursWorked;
    private double payRate;
    private double straightPay;

    public void printEmployeeData() {
        System.out.println("Employee ID         Name        Hours Worked        Pay      Amount");

        try {
            source = new File("Payroll.txt");
            input = new Scanner(source);
            input.useDelimiter("[,\n]");
        } catch (Exception e) {
            System.out.println(e);
        }

        while (input.hasNext()) {
            if (payrollType.equals("S")) {
                employeeID = input.nextInt();
                employeeName = input.next();
                hoursWorked = input.nextInt();
                payRate = input.nextDouble();
                payrollType = input.next();
                straightPay = (hoursWorked * payRate);

                System.out.println(" " + employeeID + "           " + employeeName
                        + "                                                "
                        + hoursWorked + "       " + straightPay);

                input.nextLine();
            }
        }
        System.out.println("No More Salaried Employees.");
    }
}

所有代码都可以编译,但在测试时,
if
语句出现错误,并显示
java.lang.NullPointerException:null

您的属性payrollType从未初始化

在null对象上调用equals方法时,这将导致NullPointerException

最好的做法是将常量(在您的例子中是字母S)与对象进行比较


因此,您的代码应该是“S”.equals(payrollType)。

我没有显示它,但已经导入了必要的包:import java.util.*;导入java.io.File;我们可以在记事本中查看您的内容吗?您在任何地方都不能
payrollType
inititalized。在代码中,它总是
null
payrollType
为null,因为在if语句中才设置它。您不能对空变量使用
.equals
。调试NullPointerException的启发式方法几乎总是一样的:您应该仔细阅读异常的堆栈跟踪,找到出现故障的代码行,即引发异常的代码行,然后仔细检查该行,找出哪个变量为空,然后追溯到你的代码,看看原因。相信我,你会一次又一次地碰到这些。今后,请在发布之前搜索该主题,因为这是一个太常见的问题,无法发布另一个NPE问题。