modal window is not removed

hello vaadin community, I’m from Colombia, I do not speak English very well so use google translator to translate it into Spanish, and can hope enterder:

I am making an application with vaadin and created an interface that extends to a VerticalLayout within the call a modal window which I think is fine, but doing tests when I call a lot and I press the esc key not removed the window, I have to take several times to remove it, and not due to this, if anyone can help me thank you very much, this is the code:

[font=Courier New]
class VentanaDeDialogo extends Window implements Action.Handler {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1352115603382072699L;

	Action esc = new ShortcutAction("ESCAPE",
			ShortcutAction.KeyCode.ESCAPE, null);
	Action[] actions = new Action[]

{ esc };

	/**
	 * Constructor de la clase {@link VentanaDeDialogo}
	 * 
	 * @param icono
	 *            icono de la ventana
	 * @param titulo
	 *            titulo de la ventana
	 * @param msj
	 *            contenido de la ventana
	 * @param ancho
	 *            ancho de la ventana
	 */
	VentanaDeDialogo(Resource icono, String titulo, String msj, String ancho) {

		Label texto = new Label(msj, 3);
		setStyleName("dialog");
		setModal(true);
		setCaption(titulo);
		setIcon(icono);
		setWidth(ancho);
		setResizable(false);
		addActionHandler(this);

		// texto del la ventana
		addComponent(texto);

		// Algo hay que enfocar en la ventana para capturar métodos
		// abreviados Esta es una limitación conocida
		// http://dev.vaadin.com/ticket/4384
		HorizontalLayout buttons = new HorizontalLayout();
		buttons.setSpacing(true);
		buttons.setWidth("100%");
		Button aceptar = new Button("Aceptar");
		aceptar.setDescription("Presione la Tecla Escape \"Esc\" para salir...");
		aceptar.setStyleName("default");
		buttons.addComponent(aceptar);
		buttons.setComponentAlignment(aceptar, 16, 32);
		addComponent(buttons);
		aceptar.focus();

	}

	public void handleAction(Action action, Object sender, Object target) {
		if (action == esc) {
			((Window) getParent()).removeWindow(this);
		}
	}

	public Action[] getActions(Object target, Object sender) {
		return actions;
	}

}

private Window getW() {

	if (getParent() == null) {
		setParent(this);
	}
	return getParent().getWindow();
}

[/font]

to create the window I use the following:

[font=Courier New]
getW().addWindow(
new VentanaDeDialogo(
u.trError,
" Error: " + oper,
“Ocurrio un Error al Validar la informacion, guarde lo datos e intente mas tarde”,
“370px”));

[/font]

this class and getw function () is inside the CALSE extending to VerticalLayout

thank you very much for your help

/////////////////////////////////

hola a la comunidad de vaadin, soy de Colombia, no hablo muy bien el ingles asi que utilice el traductor de google para traducirlo al español, espero y se pueda enterder:

estoy realizando una aplicacion con vaadin y he creado una interfaz que extiende a un VerticalLayout, dentro de el llamo una ventana modal lo cual me resulta bien, pero haciendo pruebas, cuando la llamo muy seguido y presiono la tecla esc no se quita la ventana, tengo que darle varias veces para poder quitarla, y no se a que se deba esto, si alguien me puede ayudar le agradezco mucho, este es el codigo:

[font=Courier New]
class VentanaDeDialogo extends Window implements Action.Handler {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1352115603382072699L;

	Action esc = new ShortcutAction("ESCAPE",
			ShortcutAction.KeyCode.ESCAPE, null);
	Action[] actions = new Action[]

{ esc };

	/**
	 * Constructor de la clase {@link VentanaDeDialogo}
	 * 
	 * @param icono
	 *            icono de la ventana
	 * @param titulo
	 *            titulo de la ventana
	 * @param msj
	 *            contenido de la ventana
	 * @param ancho
	 *            ancho de la ventana
	 */
	VentanaDeDialogo(Resource icono, String titulo, String msj, String ancho) {

		Label texto = new Label(msj, 3);
		setStyleName("dialog");
		setModal(true);
		setCaption(titulo);
		setIcon(icono);
		setWidth(ancho);
		setResizable(false);
		addActionHandler(this);

		// texto del la ventana
		addComponent(texto);

		// Algo hay que enfocar en la ventana para capturar métodos
		// abreviados Esta es una limitación conocida
		// http://dev.vaadin.com/ticket/4384
		HorizontalLayout buttons = new HorizontalLayout();
		buttons.setSpacing(true);
		buttons.setWidth("100%");
		Button aceptar = new Button("Aceptar");
		aceptar.setDescription("Presione la Tecla Escape \"Esc\" para salir...");
		aceptar.setStyleName("default");
		buttons.addComponent(aceptar);
		buttons.setComponentAlignment(aceptar, 16, 32);
		addComponent(buttons);
		aceptar.focus();

	}

	public void handleAction(Action action, Object sender, Object target) {
		if (action == esc) {
			((Window) getParent()).removeWindow(this);
		}
	}

	public Action[] getActions(Object target, Object sender) {
		return actions;
	}

}

private Window getW() {

	if (getParent() == null) {
		setParent(this);
	}
	return getParent().getWindow();
}

[/font]

para crear la ventana yo utilizo lo siguiente:

[font=Courier New]
getW().addWindow(
new VentanaDeDialogo(
u.trError,
" Error: " + oper,
“Ocurrio un Error al Validar la informacion, guarde lo datos e intente mas tarde”,
“370px”));

[/font]

esta clase y la funcion getW() esta dentro de la calse que extiende al VerticalLayout

muchas gracias por su ayuda