Comportamiento extraño de la GUI de Java en una PC con Windows a través de un túnel SSH hacia/desde una máquina Linux

Comportamiento extraño de la GUI de Java en una PC con Windows a través de un túnel SSH hacia/desde una máquina Linux

Tengo un problema muy extraño con una GUI de Java que construí en el trabajo. ¡¡Es tan raro que ni siquiera sé por dónde empezar a buscar ayuda!!

Contamos con un sistema independiente en una ubicación externa que consta de una PC con Windows, con XP y una máquina SuSE Linux. Creé una GUI de Java que ejecuta algunos scripts bash en la máquina Linux. La GUI se inicia desde la máquina Windows porque el usuario no es un usuario de Linux. La GUI se creó para reemplazar los scripts que presentaban al usuario mensajes de línea de comando para proporcionar entradas a los scripts de procesamiento principales.

El usuario hace clic en un icono en el escritorio de Windows que ejecuta un archivo por lotes de DOS (*.bat). El archivo por lotes utiliza plink, con una sesión PuTTY almacenada, para conectarse a la máquina Linux y ejecutar un comando "java -jar XXX.jar" para iniciar la GUI. La GUI se muestra en la PC con Windows debido a que Cygwin/XX Server se ejecuta en la PC con Windows.

Bueno. Ahora la rareza. Si dejo la GUI en la ubicación donde aparece inicialmente, todo está bien. Si muevo la GUI, los menús desplegables (cuadros combinados desplegables y barras de menú desplegables) ya no funcionan correctamente. Y SÓLO los menús desplegables. Todo lo demás funciona bien (botones, campos de texto,...). Si muevo la GUI a su ubicación original, todo funciona bien. Si hago clic, mantengo y arrastro el cursor del mouse hacia donde apareció inicialmente la GUI (dejando la GUI donde la moví), los menús desplegables funcionan correctamente.

Al principio pensé que tenía un problema con la forma en que inicialicé los menús desplegables, pero ya no estoy tan seguro. Me pregunto si está sucediendo algo extraño con las configuraciones de Windows <-> PuTTY <-> Linux o Xwin.

Lo que contribuye a no poder resolver esto es que no puedo replicar este comportamiento en el trabajo. Lamentablemente no tenemos una réplica exacta del sistema externo; Estoy probando/construyendo esta GUI en una máquina XP a Debian Linux.

¿Alguien ha visto algo como esto? ¿Alguna sugerencia sobre lo que podría estar pasando aquí?

Mil millones de gracias

Factura

Respuesta1

No creo que ejecutar Java a través de la redirección X sea una buena idea.

¿Por qué no coloca el programa Java en la PC con Windows y lo usa para iniciar plinky ejecutar el comando? Si tiene el código fuente del programa Java, debería ser trivial agregar una clase que ajuste y reemplace Runtime.getRuntime().exec()y la coloque plinkdelante de la línea de comando. Entonces tal vez puedas trabajar un poco en la clase para que use una plinksesión para todo. Luego, también puede crear otra clase con la misma interfaz pero sin agregarla plinkpara que su programa Java pueda ejecutarse tanto en Windows como en Linux.

Respuesta2

Con Java 1.7 puede utilizarlo -Dsun.java2d.xrender=truecuando utilice un X Display remoto. Hace que Java sepa que se está ejecutando en X. Consultehttp://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html

Respuesta3

Podría tener algo que ver con la aceleración de hardware de Java 2D, el sistema de gráficos de Java.

Intente desactivar cualquier aceleración de hardware agregando la siguiente opción de línea de comando del proceso Java:

-Dsun.java2d.d3d=false

También hay una referencia completa a la configuración de Java 2D.aquí. Desactivar Direct 3D hará que la interfaz de usuario sea más lenta, pero para interfaces de usuario simples con solo menús y sin animaciones, no debería importar.

información relacionada