在GraphicsView类的onDraw方法中,我创建了Plotter类的实例,但构造函数未设置类内Canvas字段
我们从这里开始
protected void onDraw(Canvas canvas) {
Plotter plotter = new Plotter(1, canvas);
}
..并转到Plotter创建它的实例:
Plotter (int dotsPerPx, Canvas canvas_) {
this.dotsPerPx = dotsPerPx;
this.canvas = canvas_;
}
int dotsPerPx; //This one gets set to 1, as supposed
Canvas canvas; //And this remains null, though canvas_==openGLCanvas{...}
int screenWidth = canvas.getWidth(); //NullPointerException!
怎么了?
最佳答案
画布尚未实例化。用这个:
Plotter (int dotsPerPx, Canvas canvas_) {
this.dotsPerPx = dotsPerPx;
this.canvas = canvas_;
screenWidth = canvas.getWidth();
}
int dotsPerPx; //This one sets to 1, as supposed
Canvas canvas; //And this remains null, though canvas_==openGLCanvas...
int screenWidth;
基本上,构造函数和方法之外的所有代码(字段创建,初始化块)都在调用构造函数之前执行。因此
int screenWidth = canvas.getWidth();
尝试在null字段上调用方法(默认情况下,除非您指定其他内容),因为尚未调用构造函数。