2014-12-16 2 views
0

У меня есть этот Vaadin объект:объект Vaadin CheckBox становится нулевым

CheckBox mycb = new CheckBox("caption"); 

Позже значение этого флажка обновляется из базы данных, как это:

mycb.setValue(dbvalue); 

dbvalue на самом деле NULL в базы данных. mycb был не null перед этим line, и есть null после этого line. Должно ли его значение оставаться неизменным, только mycb.getValue(), возвращающий null?

Кроме того, пытаясь избежать NullPointerException с оценкой короткого замыкания:

if (mycb != null && mycb.getValue() == true) 
... 

Это производит NullPointerException в любом случае. Это нормальное поведение или есть что-то, что я делаю неправильно?

+1

Единственный способ mycb становится нулевым после вызова SetValue, если этот метод как-то (по линии) получает доступ к той же переменной mycb. Может быть, есть прослушиватель событий, который слушает и имеет выражение mycb = null? Является ли mycb локальной переменной? –

+0

Неужели вы добавили слушателей в mycb, особенно ValueChangeListener? – kukis

+0

@DavidtenHove, mycb - это поле, и я пробовал использовать «private» и «final», и результат тот же. – golimar

ответ

4

Вы сказали, что mycb фактически не становится нулевым. Замечательно.

if (mycb != null && mycb.getValue() == true) 

Это бросает NullPointerException потому, что Java пытается привести результат от mycb.getValue() к boolean. Но поскольку mycb.getValue() возвращает null, он выбрасывает NullPointerException.

Изменить это:

if (mycb.getValue() != null && mycb.getValue() == true) 

Или что-то подобное

+2

Это работает. Вывод: в конце концов, он не имел ничего общего с Ваадином, на Java просто «Boolean b = null; if (b);» вы получаете NPE;) – golimar

Смежные вопросы