public static void main(String[] args) {
    IDoor door = new SingleDoor();
    JFrame j = new JFrame();
    j.add(door.createDoorUI());
    j.setVisible(true);

    synchronized (door) {
      door.openDoor();
      try {
        door.wait();
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  @Override
  public void run() {

    int i = 0;
    if (command.equalsIgnoreCase("Open")) {
      synchronized (door) {
        while (i < 5) {
          System.out.println("i value" + i);
          door.setDoorStatus("OPENING");
          try {
            Thread.currentThread().sleep(500); // 2000
          } catch (InterruptedException e) {
            return; // e.printStackTrace();
          }
          i = i + 2;
        }

        door.setDoorStatus("OPENED");
        door.notifyAll();
      }
    } else {

      synchronized (door) {
        while (i < 5) {
          System.out.println("i value" + i);
          door.setDoorStatus("CLOSING");
          try {
            Thread.currentThread().sleep(500); // 2000
          } catch (InterruptedException e) {
            return; // e.printStackTrace();
          }
          i = i + 2;
        }

        door.setDoorStatus("CLOSED");
        door.notifyAll();
      }
    }
  }