使用类处理OOP问题

时间:2014-12-19 22:02:15

标签: java android eclipse applet processing

我正在使用Processing的Android模式来创建草图。现在,我只想使用自定义Dot类显示椭圆。 Eclipse没有检测到任何错误。我将发布整个代码以供参考。主要活动的代码如下:

package com.example.yo;

import processing.core.PApplet;

public class MainActivity extends PApplet  {

public Dot dot = new Dot(50,50,155,200,20);

    public void setup() {
        background(0,0,0);
        stroke(255,0,0);
        strokeWeight(10);
    }

    public void draw() {
        dot.display();
    }
}

Dot类如下:

package com.example.yo;

import processing.core.PApplet;

public class Dot extends PApplet{
    //declaration of dot's fields
    public int x;
    public int y;
    public int redd;
    public int greenn;
    public int bluee;
    public Boolean through = false;

    //constructor
    Dot(int xPos, int yPos, int redness, int greenness, int blueness){
        x = xPos;
        y = yPos;

        redd = redness;
        greenn = greenness;
        bluee = blueness;
    }

    public void display(){
        noStroke();
        fill(redd,greenn,bluee);

        if (through){        
            ellipse(x, y,40,40);
        }else{
            ellipse(x, y, 30, 30);
        }

    }
}

当我尝试运行应用程序时,应用程序立即崩溃,并且消息框“不幸的是,Yo已经停止了#39;我必须承认,我不能更准确地指出你的问题,因为我不知道代码中有什么问题。 Dot类的结构与Processing帮助页面上给出的示例等效:https://www.processing.org/reference/class.html 这两个类都在同一个包中。

我试图在设置函数中实例化点,在它之外,甚至在绘制循环中连续实例化,但没有成功。

如果您需要更多信息,请与我们联系。提前谢谢。

1 个答案:

答案 0 :(得分:3)

问题解决了。供将来参考:

dot类在任何情况下都不应该扩展PApplet,这只应该是主要活动的情况。但是,当dot类没有扩展PApplet时,Eclipse会给出错误,这并不奇怪,因为它不理解任何处理命令。要解决这个问题,应该在开头声明PApplet类,然后在构造函数中将PApplet作为参数传递并分配给我们在开头声明的变量。现在,应将所有处理命令视为父类的方法。这是dot的以下代码(我在MainActivity类中添加的唯一更改是使用 this 作为附加参数调用Dot):

package com.example.yo;

import processing.core.*;

class Dot{
    //declaration of dot's fields
    public float xpos;
    public float ypos;
    public int redd;
    public int greenn;
    public int bluee;
    public Boolean through = false;
    PApplet parent;

    //constructor
    Dot(PApplet p, float xPosition, float yPosition, int redness, int greenness, int blueness){
        parent = p;
        xpos = xPosition;
        ypos = yPosition;

        redd = redness;
        greenn = greenness;
        bluee = blueness;
    }
    public void display(){
        parent.noStroke();
        parent.fill(redd,greenn,bluee);

        if (through){        
            parent.ellipse(xpos, ypos, 4.0f, 4.0f);
        }else{
            parent.ellipse(xpos, ypos, 30.0f, 30.0f);
        }       
    }   
}

此问题的解决方案最好在此处描述:

https://processing.org/tutorials/eclipse/

在带有多个类的Eclipse中的处理部分。