gpt4 book ai didi

java - 在处理中实例化变量异常

转载 作者:行者123 更新时间:2023-12-02 07:16:46 24 4
gpt4 key购买 nike

我正在尝试为类创建构造函数

// Variables to send to Host
private class ParameterClass {
public String parameter;
public int value;
public Boolean sended;
}

public class SendToHostClass {
private int sizeBuffer;
public ParameterClass[] parameterList;

SendToHostClass(int sizeBufferConf) {
sizeBuffer = sizeBufferConf;
parameterList = new ParameterClass[sizeBuffer];
}

public void Put (String parameter, int valuePut, Boolean sendedPut) {
for (int index=0; index<sizeBuffer; index++) {
if (parameter == parameterList[index].parameter) {
parameterList[index].value = valuePut;
parameterList[index].sended = sendedPut;
exit();
}
}
}
}

所以我声明变量

SendToHostClass sendToHost;

并使用setup()处理方法实例化sendToHost

sendToHost = new SendToHostClass(10);
sendToHost.parameterList[0].value = 0;

当我运行代码时,它返回错误消息

Exception in thread "Animation Thread" java.lang.NullPointerException at sketch_gui.setup(sketch_gui.java:273) at processing.core.PApplet.handleDraw(PApplet.java:2117) at processing.opengl.PGL$PGLListener.display(PGL.java:2472) at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:548) at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:533) at jogamp.opengl.GLAutoDrawableBase$2.run(GLAutoDrawableBase.java:280) at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:904) at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:822) at com.jogamp.newt.opengl.GLWindow.display(GLWindow.java:543) at processing.opengl.PGL.requestDraw(PGL.java:814) at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1566) at processing.core.PApplet.run(PApplet.java:2020) at java.lang.Thread.run(Thread.java:662)

那么我做错了什么?

我还发现,如果我单独实例化每个列表对象,它不会给出错误:

sendToHost = new SendToHostClass(10);
sendToHost.parameterList[0] = new ParameterClass();
sendToHost.parameterList[0].value = 0;

但这似乎是错误的,因为看起来 parameterList 成员被实例化了两次。

提前致谢。

最佳答案

parameterList = new ParameterClass[sizeBuffer];

上面的语句只是创建了一个数组,并没有初始化数组元素。数组元素由其默认值(即 null)初始化,以防您有某种自定义类型 的数组或某种引用。因此,您需要使用 for 循环单独初始化数组元素。

因此,在构造函数中您需要添加一个循环:

SendToHostClass(int sizeBufferConf) {
sizeBuffer = sizeBufferConf;
parameterList = new ParameterClass[sizeBuffer];

for (int i = 0; i < sizeBuffer; i++) {
parameterList[i] = new ParameterList();
}
}

但是,当然,首先您需要将您的类设为 public,并且更愿意将您的字段设为 private 而不是 public,并提供公共(public)访问器,使它们可以从外部访问。

关于java - 在处理中实例化变量异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com