Я пробую BoundTableModel
в первый раз, и когда я попытался установить метки своих свойств, я получил NullPointerException
.
[EDT] 0:0:8,239 - Exception: java.lang.NullPointerException - null
java.lang.NullPointerException
at com.codename1.properties.PropertyBase.putClientProperty(PropertyBase.java:131)
at com.codename1.properties.PropertyBase.setLabel(PropertyBase.java:192)
at our.app.forms.UnitsForm.<init>(UnitsForm.java:54)
NPE выбрасываетсяв этом блоке кода, но я не понимаю, почему.properties
имеют значение public
final
и создаются в пределах UserHistory
, но метка там не установлена.Лучше установить их позже, так как они должны быть переведены нашим TranslationManager
.
UiBinding ui = new UiBinding();
List<UserHistory> histories = RestManager.getHistory();
UserHistory prototype = new UserHistory();
prototype.dateCreate.setLabel("Date");
prototype.balanceUpdate.setLabel("Variation");
prototype.action.setLabel("Action");
UiBinding.BoundTableModel tb = ui.createTableModel(histories, prototype);
tb.setColumnOrder(prototype.dateCreate, prototype.balanceUpdate, prototype.action);
Table table = new Table(tb);
Я не понимаю, как setLabel(String)
из Property
может бросить NullPointerException
, любойидея?
РЕДАКТИРОВАТЬ: Вот классы, которые не удается, во-первых это AbstractEntity
:
public abstract class AbstractEntity implements Serializable, PropertyBusinessObject
{
public final LongProperty<AbstractEntity> id = new LongProperty<>("id");
public final IntProperty<AbstractEntity> version = new IntProperty<>("version");
public final Property<Date, AbstractEntity> dateCreate = new Property<>("dateCreate", Date.class);
public final Property<Date, AbstractEntity> dateUpdate = new Property<>("dateUpdate", Date.class);
protected List<PropertyBase> getPropertyList()
{
List<PropertyBase> list = new ArrayList<>();
list.add(id);
list.add(version);
list.add(dateCreate);
list.add(dateUpdate);
return list;
}
protected List<PropertyBase> getExcludePropertyList()
{
List<PropertyBase> list = new ArrayList<>();
return list;
}
@Override
public PropertyIndex getPropertyIndex()
{
PropertyBase[] properties = getPropertyList().toArray(new PropertyBase[getPropertyList().size()]);
PropertyIndex index = new PropertyIndex(this, getName(), properties);
for(PropertyBase excluded : getExcludePropertyList())
{
index.setExcludeFromJSON(excluded, true);
index.setExcludeFromMap(excluded, true);
}
return index;
}
}
А вот дочерний класс, который я пытался показать в таблице:
public class UserHistory extends AbstractEntity
{
public final Property<User, UserHistory> user = new Property<>("user", User.class);
public final DoubleProperty<UserHistory> balanceUpdate = new DoubleProperty<>("balanceUpdate");
public final Property<String, UserHistory> action = new Property<>("action");
public UserHistory() {}
@SuppressWarnings("rawtypes")
protected List<PropertyBase> getPropertyList()
{
List<PropertyBase> list = super.getPropertyList();
list.add(user);
list.add(balanceUpdate);
list.add(action);
return list;
}
}