- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个任务,我必须通过 PApplet 处理器显示“健身房机器”及其数据。我需要使用多态和继承(运行机是 GymMachine 等)。每个健身房机器必须有自己的绘制方法。我只是不知道如何避免 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);
}
}
为了清楚起见,这是我的运行机类(class):
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();
}
}
在过去的 5 个小时里,我一直无法弄清楚为什么 treadmill.draw()
会提示 NullPointerException。我不太确定 null
变量是什么。我曾尝试使 ProcessingExample 和 GymMachine 成为同一个类,因为我认为它可能需要访问“相同的 Canvas ”,但问题是 ProcessingExample 不断调用自身,因为我需要在某处创建运行机实例。我还读到,与其让 GymMachine extend PApplet
,不如让构造函数接受 PApplet
类型的参数,(即 GymMachine(PApplet p){. ..})
,但我无法从中获取 TreadMill
。感谢您的帮助。
最佳答案
只有一个类应该扩展 PApplet
类。
将 PApplet
视为在窗口中运行的整个草图。您只想显示一个窗口,对吗?所以你只需要一个 PApplet
类。
您不希望每个 GymMachine
都显示在自己的窗口中。您希望在一个窗口中绘制多个 GymMachines
。所以去掉 GymMachine
类上的 extends PApplet
。
这样做之后,您会遇到一些编译器错误,因为 GymMachine
类无法识别 fill()
或 rect()< 等函数
。要解决此问题,您需要将主草图类(扩展 PApplet
的类)的实例传递到辅助草图类中。 this
关键字可以派上用场。
最后,您必须使用对主要 PApplet
草图的引用来调用处理函数。这是一个例子:
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);
}
}
参见 this tutorial 的从非草图类调用处理函数部分了解更多信息。
关于java - 多态 PApplet 处理 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014263/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!