繁体   English   中英

Android / Java:将Canvas作为类构造函数参数传递失败

[英]Android/Java: failure passing Canvas as a class constructor parameter

在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字段上调用方法(默认情况下,除非您指定其他内容),因为尚未调用构造函数。

暂无
暂无

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

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