java - 使用 PeasyCam 和处理时出现 java.lang.NullPointerException。PeasyCam 说它无法读取“宽度”,因为一片空白
问题描述
我正在使用IntelliJ idea
,processing
和peasy
显然Java
运行所有内容。我正在尝试在我的setting()
方法中使用 PeasyCam,但它一直给我这个错误:
java.lang.NullPointerException: Cannot read field "width" because "<parameter2>" is null
at peasy.PeasyCam.<init>(Unknown Source)
at peasy.PeasyCam.<init>(Unknown Source)
at com.nod.planets.Main.settings(Main.java:14)
at processing.core.PApplet.handleSettings(PApplet.java:978)
at processing.core.PApplet.runSketch(PApplet.java:10897)
at processing.core.PApplet.main(PApplet.java:10657)
at processing.core.PApplet.main(PApplet.java:10639)
at com.nod.planets.Main.main(Main.java:45)
老实说,我对 peasy 和处理完全陌生,在调试时我被困住了。
这是供参考的代码:
package com.nod.planets;
import processing.core.PApplet;
import peasy.*;
public class Main extends PApplet
{
PeasyCam cam;
@Override
public void settings()
{
size(600, 600, P3D);
cam = new PeasyCam(this, 200);
}
@Override
public void draw()
{
background(0);
fill(255);
lights();
//translate(width / 2, height / 2);
float sphereRadius = 200;
int sphereVertices = 100;
for (int i = 0; i < sphereVertices; i++)
{
float longitude = map(i, 0, sphereVertices, -PI, PI);
for (int j = 0; j < sphereVertices; j++)
{
float latitude = map(j, 0, sphereVertices, -HALF_PI, HALF_PI);
float x = sphereRadius * sin(longitude) * cos(latitude);
float y = sphereRadius * sin(longitude) * sin(latitude);
float z = sphereRadius * cos(longitude);
stroke(255);
strokeWeight(2);
point(x, y, z);
}
}
}
public static void main(String[] args)
{
PApplet.main("com.nod.planets.Main");
}
}
如果我摆脱初始化 PeasyCam 并取消注释translate(width / 2, height / 2);
代码,那么它就像一个魅力,但是当我尝试这个的那一刻,它给出了那个错误......只是这个该死的“简单”“PeasyCam”给我带来了麻烦。另外,是的,如果您想知道,我正在尝试制作具有柏林噪声地形的行星。不要@我它是否会工作(idk tbh),请帮助我弄清楚为什么它会给我这个错误。
解决方案
该问题可能是由于调用PApplet
函数时对象未完全初始化造成的settings
。
背景信息:类的“主”构造函数PeasyCam
使用PGraphics
从对象派生的PApplet
对象。该PGraphics
对象在被调用时可能为 null settings
,这将导致构造函数中的以下行PeasyCam
失败:
viewport[2] = pg.width;
您可以将相机的初始化推迟到这样的setup
函数(感谢George Profenza改进此答案):
@Override
public void settings()
{
size(600, 600, P3D);
}
@Override
public void setup()
{
cam = new PeasyCam(this, 200);
}
@Override
public void draw()
{
background(0);
// [...]
}
推荐阅读
- javascript - 如何通过javascript更改类的所有元素的字体颜色?
- node.js - 垃圾邮件套接字 io 连接
- codeigniter - 重定向在真实服务器上的 Codeigniter 中不起作用。错误报告但未显示任何错误
- typescript - 为什么不分配它,尽管 Array 是协变的?
- c++ - 带有 shared_ptr 的处理程序中的分段错误
- excel - 带字符串的公式
- azure - 当应用程序在 docker 上运行时,Windows Docker 容器 > 呈现的 PDF 的布局不同
- laravel - 如何安装/使用这个包 = akiyamaSM / larapoll
- python - 用于工作 python 脚本的多输入 PySimpleGUI
- entity-framework - 如何找到财产的持有人