Java I';我在addPointLoad()方法中得到一个空指针异常

Java I';我在addPointLoad()方法中得到一个空指针异常,java,arrays,object,nullpointerexception,Java,Arrays,Object,Nullpointerexception,我试图通过这个方法访问2个对象类,但它给出了一个空指针异常。不知道是数组大小还是更复杂。有人建议我按以下方式增加数组大小(大小x1.5),但我不知道如何才能做到这一点 以下是梁类: public abstract class Beam { private String name; protected double length; // [m] protected double Emod; // [MPa] protected double Ixx; // [m^4

我试图通过这个方法访问2个对象类,但它给出了一个空指针异常。不知道是数组大小还是更复杂。有人建议我按以下方式增加数组大小(大小x1.5),但我不知道如何才能做到这一点

以下是梁类:

public abstract class Beam {
    private String name;
    protected double length; // [m]
    protected double Emod; // [MPa]
    protected double Ixx; // [m^4]
    private LoadModel loadModel;

    public Beam(String name, double length, double Emod, double Ixx) {
        this.name = name;
        this.length = length;
        this.Emod = Emod;
        this.Ixx = Ixx;
    }
    public void addPointLoad(double magnitude, double loadPos) {
        PointLoad PL = new PointLoad(magnitude, loadPos);
        loadModel.addPL(PL);
    }
LoadModel类如下所示:

public class LoadModel {
    private PointLoad[] pointLoads;
    private LineLoad[] lineLoads;
    public int plCounter;
    public int llCounter;

    public LoadModel(PointLoad[] pl, LineLoad[] ll) {
        pointLoads = new PointLoad[2];
        lineLoads = new LineLoad[2];
        plCounter = 0;
        llCounter = 0;
    }

    public void addPL(PointLoad pl) {
        if (plCounter < pointLoads.length) {
            pointLoads[plCounter] = pl;
            plCounter++;
        } else {
            plCounter++;
            pointLoads[plCounter] = pl;
            plCounter++;
        }
        System.out.println("The amount of Point Loads have been increased");
    }

    public int numPL() {  //Added this aswell as I want to keep track of the number of point loads
        return plCounter;
    }

任何帮助都将不胜感激。

嗯!您的
loadModel
引用在
Beam
类中似乎为空。您需要在梁的构造函数中初始化它。

添加到梁构造函数此行:


loadModel=新的loadModel(null,null)

您声明一个成员,如

private LoadModel loadModel;
然后,您尝试调用它的方法,如

loadModel.addPL(PL)
它失败的原因是,因为您无法调用不存在的方法。因此,要解决实际问题,需要通过调用
loadModel
的构造函数来初始化
loadModel

您可以立即知道数组大小是否是实际问题,因为尝试引用超出边界的数组元素将抛出一个,而不是一个
NullPointerException


现在修复NPE问题后,您可能会遇到其他问题,但让我们在它们真正开始导致问题时担心它们。您可以通过创建一个与所需大小相同类型的新数组来“调整”数组的大小,并按照您的意愿初始化其元素(通过复制源的元素),然后将新数组指定为数组变量的新值。

我看不到Ertag BEAM的任何用途。请取下横梁标签。此外,load标签用于cpu上的负载,而不是物理负载。请同时删除该标记。您可以添加异常输出吗?@NomadMaker抱歉,我指的是结构梁和loads@Moray我不知道你指的是什么,我是个新手programming@Arnaud我会查一查,谢谢行不通。LoadModel构造函数接受参数。如果我在子类中初始化它,它会像声明为私有属性一样工作吗?@El_Chupacabra,它不会工作,但您可以创建一个公共方法来调用构造函数并初始化成员,然后调用该公共方法。
loadModel.addPL(PL)