¿Cómo detengo / soluciono las aplicaciones Java que se centran en los administradores de ventanas de Linux?

Queremos crear prototipos de widgets rápidamente en Java. Los superponemos en la parte superior de una pantalla escrita en un paquete de gráficos de terceros patentado. Encontramos que la GUI de Java le roba el foco del teclado al administrador de ventanas.

El administrador de ventanas es fvwm, he intentado configurarlo para que la aplicación Java esté configurada para no enfocarse, y además, si alguna vez obtiene el foco, lo quito y lo entrego a la otra GUI.

Si ejecuto esto con la aplicación Java, no funciona (cada vez que el mouse está sobre la GUI de Java tiene el foco del teclado); si cambio algún widget X GUI estándar (XEyes) en lugar de la GUI de Java, funciona como un encanto . Esto le da cierta importancia a la afirmación (mantenida por la gente de fvwm) de que Java no respeta el ICCCM.

Me pregunto si otras personas han resuelto este problema y, de ser así, cómo. Hasta ahora tengo algunas opciones sobre cómo intentar solucionar esto:

1) twiddle la configuración de Java, con la esperanza de que si apago el foco allí, tal vez devuelva el control de foco al administrador de ventanas (hasta ahora he intentado "setFocusable (false)" en el JFrame principal. Esto no funcionó. A hilo "http://java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaao"indicó que debería hacerlo" Window.setFocusableWindowState (false) "La GUI en cuestión aún no se ha rehecho en una ventana, pero tampoco estoy completamente convencido de que Java renuncie al foco

2) realice llamadas X de bajo nivel en el programa Java utilizando JNI. Creo que esto probablemente funcionaría, pero nunca jugué mucho con el nivel X bajo. No estoy seguro de qué llamadas debería usar (se supone que XtSetKeyboardFocus () es peligroso llamar ...) o cómo puedo identificarme la GUI en la que estoy operando (a este respecto, fvwm fue agradable ya que tenían una GUI que le permitía hacer clic en otra GUI y descubrir su "nombre" y "clase")

3) use un administrador de ventanas "más fuerte". Algunos gestores de ventanas que no utilizan ICCCM podrían tratar mejor con Java. Por supuesto, hay una gran cantidad de gerentes, y no estoy seguro de en qué concentrarme. Del mismo modo, muchos parecen ser cortos en especificar el enfoque por aplicación (la mayoría parece preocuparse por políticas generales).

Respuestas a la pregunta(1)

Su respuesta a la pregunta