如何在GWT中调用@UiField字段的方法

如何在GWT中调用@UiField字段的方法,gwt,uibinder,Gwt,Uibinder,这是我的课 public class PersonView extends Composite{ private Person person; @UiField FirstnameView firstnameView; @UiField LastnameView lastnameView; public PersonView(Person person) { setData(person); } public

这是我的课

public class PersonView extends Composite{

    private Person person;

    @UiField
    FirstnameView firstnameView;
    @UiField
    LastnameView lastnameView;

    public PersonView(Person person) {
        setData(person);
    }

    public void setData(Person person) {
        firstnameView.setData(person.getFirstname());
        lastnameView.setData(person.getLastname());
    }
}
public class FirstnameView extends Composite{

        private Firstname firstname;

        @UiField
        TextBox firstnameTextBox;

        public FirstnameView() {
        }

        public void setData(Firstname firstname) {
            firstnameTextBox.setValue(firstname.getFirstname());
        }
    }
public class LastnameView extends Composite{

        private Lastname lastname;

        @UiField
        TextBox lastnameTextBox;

        public LastnameView() {
        }

        public void setData(Lastname lastname) {
            lastnameTextBox.setValue(lastname.getLastname());
        }
    }
我的问题是,当我调用方法
setData(person)
时,我得到以下错误

java.lang.NullPointerException: null in the line `firstnameView.setData(person.getFirstname())`

我认为
@UiField FirstnameView FirstnameView
(还有
lastnameView
)不会创建对象。我真的不明白gwt在这种情况下是如何工作的。请帮助我解析它并设置数据。

@UiField
s仅在调用
UiBinder
实例上的
initAndBindUi
时“注入”,并以
@UiField
s作为参数传递实例

换句话说,在调用
setData()
之前,您的
PersonView
构造函数应该先初始化
UiBinder
实例并调用
binder.initAndBindUi(this)