我创建了一个从Manager类继承的类,该类将充当其他四个称为AbstractColumn的抽象类的持有人。

想象一个有4列的表,该表本身是主类,每列是AbstractColumn。

我不明白为什么会收到此错误。

这是我的课。

Main ColumnHolder.java类

package tec.expenses;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.VerticalFieldManager;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;




public class ColumnHolderManager extends Manager{

    private AbstractColumn Entry;
    private AbstractColumn Category;
    private AbstractColumn Date;
    private AbstractColumn Amount;

    protected ColumnHolderManager(long style){
        super(style);

        Background mainBackground = BackgroundFactory.createSolidBackground(0xEEEEEE);
        setBackground(mainBackground);

        AbstractColumn Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL);
        AbstractColumn Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL);
        AbstractColumn Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL);
        AbstractColumn Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL);

        add(Entry);
        add(Category);
        add(Date);
        add(Amount);
    }

    protected void sublayout(int width, int height) {

        /*layoutChild(this.Entry, 85, 50);
        setPositionChild(this.Entry, 10, 10 );

        layoutChild(this.Category, 85, 50);
        setPositionChild(this.Category, 40, 0 );

        layoutChild(this.Date, 85, 50);
        setPositionChild(this.Date, 70, 0 );

        layoutChild(this.Amount, 85, 50);
        setPositionChild(this.Amount, 100, 0 );*/

        setExtent(360, 203);
    }

}


抽象AbstractColumn类

package tec.expenses;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.BitmapField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.decor.Background;
import net.rim.device.api.ui.decor.BackgroundFactory;


public class AbstractColumn extends Manager {
    LabelField labelHeader;

    protected AbstractColumn(String header, long style){
        super(style);

        Background mainBackground = BackgroundFactory.createSolidBackground(0xCACACA);
        setBackground(mainBackground);

        this.labelHeader = new LabelField(header);

        add(labelHeader);
    }

    protected void sublayout(int width, int height) {

        layoutChild(labelHeader, 80, 30);
        setPositionChild(labelHeader, 5, 5);

        setExtent(90, 50);
    }
}


如您所见,这些类非常简单,但我不明白为什么会出现此错误。

我正在使用Eclipse作为IDE为Blackberry开发此应用程序。

当我注释掉Sublayout方法的setPositionChild方法时,我不再得到异常,这意味着在ColumnHolderManager类的构造函数中,并没有真正创建新的AbstractColumn对象。

有什么帮助吗?

最佳答案

在这些行中:

AbstractColumn Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL);
AbstractColumn Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL);
AbstractColumn Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL);
AbstractColumn Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL);


您正在创建和初始化局部变量。

您要初始化实例成员。像这样:

Entry = new AbstractColumn("Entry", NO_HORIZONTAL_SCROLL);
Category = new AbstractColumn("Category", NO_HORIZONTAL_SCROLL);
Date = new AbstractColumn("Date", NO_HORIZONTAL_SCROLL);
Amount = new AbstractColumn("Amount", NO_HORIZONTAL_SCROLL);


同样,正常的Java代码样式规则指示您的成员应以小写字母开头:输入,类别,日期,金额。

10-06 03:09