Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多态性PApplet处理NullPointerException_Java_Processing - Fatal编程技术网

Java 多态性PApplet处理NullPointerException

Java 多态性PApplet处理NullPointerException,java,processing,Java,Processing,我有一个任务,我必须通过PApplet处理器显示“健身房机器”及其数据。我需要使用多态性和继承(跑步机是健身机,等等)。每台健身器材都必须有自己的画法。我就是不知道如何避免NullPointerException 这是我的“ProcessingExample.java”文件中的代码,该代码将通过处理器实际绘制图像: import processing.core.PApplet; import processing.core.PImage; public class ProcessingExam

我有一个任务,我必须通过PApplet处理器显示“健身房机器”及其数据。我需要使用多态性和继承(跑步机是健身机,等等)。每台健身器材都必须有自己的画法。我就是不知道如何避免NullPointerException

这是我的“ProcessingExample.java”文件中的代码,该代码将通过处理器实际绘制图像:

import processing.core.PApplet;
import processing.core.PImage;

public class ProcessingExample extends PApplet {

  public long start_time;

  public static int canvas_x = 1200;
  public static int canvas_y = 800;

  TreadMill treadmill;
  Stepper stepper;
  Bicycle bicycle;

  public ProcessingExample(){
    start_time = System.currentTimeMillis();
  }

  public void setup(){
    size(canvas_x, canvas_y);
    treadmill = new TreadMill();
    stepper = new Stepper();
    bicycle = new Bicycle();
  }

  public void draw(){
    // treadmill
    treadmill.draw();
  }
}
这是我的GymMachine类,跑步机将从中派生:

import processing.core.PApplet;
import processing.core.PImage;

public class GymMachine extends PApplet {
  public long start_time;

  public static int canvas_x = 1200;
  public static int canvas_y = 800;

  public GymMachine(){
    start_time = System.currentTimeMillis();
  }

  public void draw(){ // for now I am just trying to draw the background, a block of color on 1/3 of the canvas
    fill(83, 85, 171);
    rect(0, 0, canvas_x / 3, canvas_y);
  }
}
以下是我的跑步机课程,只是为了清晰起见:

import processing.core.PApplet;
import processing.core.PImage;

public class TreadMill extends GymMachine {
  private int angleOfInclination;
  private double mph;

  public TreadMill(){
    angleOfInclination = 1;
    mph = 1.0;
    image = "treadmill.png";
  }

  public TreadMill(int i, double m){
    if (i >= 1 && i <= 15){ // data validation
      angleOfInclination = i;
    }
    else { // else, defer to defaults
      angleOfInclination = 1;
    }

    if (m >= 1.0 && m <= 15.0){
      mph = m;
    }
    else {
      mph = 1.0;
    }
  }

  public void setAngleOfInclination(int i){
    if (i >= 1 && i <= 15){ // data validation
      this.angleOfInclination = i;
    }
  }

  public void setMPH(double m){
    if (m >= 1.0 && m <= 15.0){ // data validation
      this.mph = m;
    }
  }

  public long getCaloriesUsed(){
     return 20 *(long) mph + 15 * angleOfInclination;
  }

  public String toString(){
    return "Angle of inclination is " + angleOfInclination + " degrees; Speed is " + mph + " mph; Calories burned: " + this.getCaloriesUsed();
  }
}
import processing.core.PApplet;
导入加工.core.PImage;
公共级跑步机{
私人诊所;
私人双英里/小时;
公共跑步机(){
倾斜角度=1;
英里/小时=1.0;
image=“treadmill.png”;
}
公共跑步机(int i,双m){

如果(i>=1&&i=1.0&&m=1&&i=1.0&&m只有一个类应该扩展
PApplet

把一个
PApplet
想象成一个在窗口中运行的整体草图。你只想显示一个窗口,对吗?所以你只想要一个
PApplet

您不希望每个
GymMachine
都显示在自己的窗口中。您希望在一个窗口中绘制多个
GymMachine
。因此,请摆脱
GymMachine
类上的
extensed PApplet

执行此操作后,将出现一些编译器错误,因为
GymMachine
类无法识别
fill()
rect()
之类的函数。要解决此问题,需要传入主sketch类的实例(扩展
PApplet
的类)进入第二个草图类。
this
关键字对此很有用

最后,您必须使用对main
PApplet
sketch的引用来调用处理函数。下面是一个示例:

public class MySketch extends PApplet{

  Thing thing = new Thing(this);

  public void draw(){
    thing.draw();
  }
}

public class Thing{
  PApplet mainSketch;

  public Thing(PApplet mainSketch){
    this.mainSketch = mainSketch;
  }

  public void draw(){
    mainSketch.ellipse(100, 100, 100, 100);
  }
}
有关更多信息,请参阅的从非草图类调用处理函数部分