我在 window 上使用锁对象,我想阻止:
当用户单击“单击我”按钮时,我想打开一个包含日历的窗口,用户应该在日历中选择一个日期。在选择日期之前,应该阻止该用户,所以我这样写:

    Button button = new Button("Click Me");
    button.addClickListener(new Button.ClickListener() {
        public void buttonClick(ClickEvent event) {
synchronized (Lock.getInstance()) {
          DateChooser dateChooser = new DateChooser(new com.kopiright.xkopi.lib.type.Date(2013, 12, 9));



          UI.getCurrent().addWindow(dateChooser);


              System.out.println("!!!!!!!!!!!I'm waiting ...");
            try {
              Lock.getInstance().wait();
              System.out.println("I'm waiting ...");
            } catch (InterruptedException e) {
              e.printStackTrace();
            }

         }

        }

      });

当用户单击按钮时,不显示窗口,并且页面无限期等待。
问题是我阻止了午餐的应用程序的原则类。
那么如何防止这种情况。
我应该创建显示DateChooser窗口的单独线程。

这是通知电话:
在DateChooser类中,我这样写:
@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();
  }
 }

这是锁类
public class Lock
 {
  private static Lock lockInstance;

public static  Lock getInstance()
{
 if (lockInstance == null)
   {lockInstance = new Lock();
    System.out.println("Creating a lock instance ...");}
    return lockInstance;
  }

 }

最佳答案

您会误解两个wait概念:GUI块和同步。

在您的情况下,您不需要同步任何东西,只需要找到一种方法,当用户单击按钮时,就可以在打开者GUI窗口中禁用并显示新的。

关于java - 使用简单的object.wait时阻止Web应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20489621/

10-13 08:08