Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT函数在DatePicker返回所选日期之前完成,如何延迟到返回日期?_Java_Gwt_Timer_Datepicker - Fatal编程技术网

Java GWT函数在DatePicker返回所选日期之前完成,如何延迟到返回日期?

Java GWT函数在DatePicker返回所选日期之前完成,如何延迟到返回日期?,java,gwt,timer,datepicker,Java,Gwt,Timer,Datepicker,下面的代码运行时不会等待popUpPanel(日期选择器)返回用户选择的日期。我知道gwt有一个计时器方法,但我想知道是否还有另一个延迟方法可以使用,可以等待它返回选定的日期,然后执行其余的代码 public static dateCalc(){ Date selection = new Date(); Date start = new Date(); Date end = new Date(); PopupCalendar popupCalendar = n

下面的代码运行时不会等待popUpPanel(日期选择器)返回用户选择的日期。我知道gwt有一个计时器方法,但我想知道是否还有另一个延迟方法可以使用,可以等待它返回选定的日期,然后执行其余的代码

 public static dateCalc(){
    Date selection = new Date();
    Date start = new Date();
    Date end = new Date();

    PopupCalendar popupCalendar = new PopupCalendar();
    popupCalendar.displayPopupCalendar();
    popupCalendar.setDate();

    while(popupCalendar.calendarVisible()){

    selection = popupCalendar.getDate();
    return date;
}

public class PopupCalendar {
    public String dateString;
    public Date date;
    public DatePicker datePicker = new DatePicker();
    final PopupPanel calendarPanel = new PopupPanel(true);

    public void displayPopupCalendar() {

        calendarPanel.setWidget(datePicker);
        calendarPanel.setGlassEnabled(true);
        calendarPanel.center();

        calendarPanel.show();


        datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() {
            @Override
            public void onValueChange(ValueChangeEvent<Date> dateValueChangeEvent) {
                date = dateValueChangeEvent.getValue();
                setDate(date);
                dateString = DateTimeFormat.getMediumDateFormat().format(date);
                //System.out.println("User selected the date: " + dateString);
                calendarPanel.hide();
            }
        });


        return date;


    }
publicstaticdatecalc(){
日期选择=新日期();
开始日期=新日期();
日期结束=新日期();
PopupCalendar PopupCalendar=新的PopupCalendar();
displayPopupCalendar();
popupCalendar.setDate();
while(popupCalendar.calendarVisible()){
selection=popupCalendar.getDate();
返回日期;
}
公共类弹出日历{
公共字符串日期字符串;
公开日期;
public DatePicker DatePicker=new DatePicker();
最终PopupPanel日历面板=新PopupPanel(真);
public void displayPopupCalendar(){
calendarPanel.setWidget(日期选择器);
calendarPanel.setGlassEnabled(true);
calendarPanel.center();
calendarPanel.show();
datePicker.addValueChangeHandler(新的ValueChangeHandler(){
@凌驾
ValueChange上的公共作废(ValueChangeEvent日期ValueChangeEvent){
date=dateValueChangeEvent.getValue();
设定日期(日期);
dateString=DateTimeFormat.getMediumDateFormat().format(日期);
//System.out.println(“用户选择的日期:“+dateString”);
calendarPanel.hide();
}
});
返回日期;
}

您必须在GWT/JavaScript(客户端)中异步执行所有操作。因此,恐怕您无法使用“while”循环进行阻塞

我认为,在大多数情况下,最好避免计时/延迟


看起来ValueChangeHandler就快到了。当它触发时,让下一件事情发生吗?

是的,salk31是正确的,在gwt中,等待是由事件处理程序完成的。其他方法对于我的观点来说似乎太粗糙了。使用事件总线怎么样?这样行吗?这行得通吗?但我认为这样做太过了。我想,事件总线是用于什么更大范围的事件,你想保持耦合松散。从快速浏览这似乎是一个自我包含的小部件?