繁体   English   中英

我在 addPointLoad() 方法中收到 null 指针异常

[英]I'm getting a null pointer exception in addPointLoad() method

我尝试通过此方法访问 2 个 object 类,但它给出了空指针异常。 不知道是简单的数组大小还是更复杂的东西。 有人建议我按照以下方式增加数组大小(大小 x 1.5),但我不知道该怎么做。

下面是 class 梁:

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 class 如下:

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;
    }

以下是 PointLoad class:

public class PointLoad {
    private double magnitude;
    private double loadPos;
    
    public PointLoad(double magnitude, double loadPos) {
        this.magnitude = magnitude;
        this.loadPos = loadPos;
    }
    
    public double getMag() {
        return magnitude;
    }
    
    public double getLoadPos() {
        return loadPos;
    }
}

任何帮助将不胜感激。

将此行添加到 Beam 构造函数:

loadModel = new LoadModel(null, null);

嗯! 您的loadModel参考似乎是Beam class 中的 null。 您需要在Beam's构造函数中对其进行初始化。

你声明一个像

private LoadModel loadModel;

然后你尝试调用它的方法

loadModel.addPL(PL)

由于NullPointerException而失败,因为您不能调用不存在的方法。 因此,要解决您的实际问题,您需要通过调用LoadModel loadModel

您可以立即知道数组大小是否是实际问题,因为尝试引用边界之外的数组元素将引发ArrayIndexOutOfBoundsException ,而不是NullPointerException

在你现在解决你的 NPE 问题之后,你可能会遇到其他问题,但是当它们真正开始引起问题时让我们担心它们。 您可以通过创建具有所需大小的相同类型的新数组来“调整”数组的大小,按照您的意愿初始化其元素(通过复制源的元素),然后将新数组分配为数组变量的新值.

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM