-1

enter code here我有一个私有布尔值exist=false;,这是我的一个局部变量payrool class

我也有方法searchRecord(int payrollPeriod, int empNo)

public void searchRecord(int payrollPeriod, int empNo)
    {
        for(int x=0;x<100;x++)
        {
            if(trans[x].getPayrollPeriod() == payrollPeriod && trans[x].getEmpNo() == empNo)
            {
                payrollCounter=x;
                exist=true;
                break;
            }
        }
    }

我的数组trans[]是一种Transaction类型(我使用组合),由具有payrollPeriod和的记录组成empNo

只要文件存在,我的程序就可以正常运行,但是当搜索结果为假java.lang.NullPointerException时...

请帮帮我,我该怎么办

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at payroll.Payroll.searchRecord(Payroll.java:350)
at payroll.Payroll.actionPerformed(Payroll.java:184)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

交易类:

package payroll;

public class Transaction extends Employee
{
//local variable
private int payrollPeriod;
private double hoursWorked;

//constructor
public Transaction(int payrollPeriod, int empNo, String name, String department, double payRate, double hoursWorked)
{
    super(empNo, name, department, payRate);
    this.payrollPeriod=payrollPeriod;
    this.hoursWorked=hoursWorked;
}

//methods
public int getPayrollPeriod()
{
    return payrollPeriod;
}
public double getHoursWorked()
{
    return hoursWorked;
}
}
4

1 回答 1

1

该数组trans[x]包含null值。

您应该:

  1. 构建时不允许null数组中的值。
  2. 检查null循环中的值并跳过/处理它们。

    public void searchRecord(int payrollPeriod, int empNo) {
        for(int x = 0; x < trans.length; x++) {
            if (trans[x] == null) {
                System.out.println("Skipped null value in trans[x]");
                continue;
            }
    
            if (trans[x].getPayrollPeriod() == payrollPeriod && trans[x].getEmpNo() == empNo) {
                payrollCounter = x;
                exist = true;
                break;
            }
        }
    }
    
于 2013-10-01T07:10:46.233 回答