Я новичок в Vaadin, и я хочу реализовать это: при нажатии кнопки открывается окно с календарем, и пользователь должен выбрать дату в календаре. Пользователь должен быть заблокирован, пока он не выбирает дату, так что я написал это:Блокировка текущей нити до закрытия диалогового окна: веб-приложение
public class KopivaadincomponentsUI extends UI {
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
Button button = new Button("Click Me");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
DateChooser dateChooser = new DateChooser(new com.kopiright.xkopi.lib.type.Date(2013, 12, 9));
UI.getCurrent().addWindow(dateChooser);
synchronized (Lock.getInstance()) {
while (dateChooser.isVisible()) {
try {
Lock.getInstance().wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
layout.addComponent(button);
}
Вот DateChooser — окно, содержащее календарь:
public class DateChooser extends Window implements ValueChangeListener{
public DateChooser(Date date){
this.setModal(true);
final FormLayout content = new FormLayout();
calPane = new CalendarPane();
content.addComponent(calPane);
this.setContent(content);
lock =new Lock();
}
/*package*/ class CalendarPane extends InlineDateField {
public CalendarPane() {
setImmediate(true);
setResolution(RESOLUTION_DAY);
setShowISOWeekNumbers(true);
}
private static final long serialVersionUID = -3958329773743250969L;
}
private CalendarPane calPane;
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event) {
synchronized(Lock.getInstance()) {
String date = String.valueOf(event.getProperty().getValue());
Calendar cal = Calendar.getInstance(Locale.FRANCE);
cal.setTime((java.util.Date) event.getProperty().getValue());
setSelectedDate(new NotNullDate(cal));
this.close();
Lock.getInstance().notify();
}
}
}
Проблема заключается в том, что при нажатии на кнопку она бесконечно ждет. Любые идеи будут оценены.
Swing? Ick ..... –
Модальное в vaadin предотвращает взаимодействие с другими формами, оно не останавливает поток от выполнения дальнейших инструкций. – SureshS
@SureshS Это правда. ОП не спрашивал, как остановить поток от выполнения - они спросили, как заблокировать пользователя от других действий, кроме выбора даты. –