2010-08-30 18 views
9

Tenemos un cliente Java/Swing que existe desde hace unos años. Cuando me mudé de XP a Vista (el cliente ÚNICAMENTE se ejecuta en Windows), noté que cada vez que se creaba una nueva ventana (generalmente un descendiente JFrame) en mi monitor secundario, la ventana inicialmente se muestra en blanco, es decir, en lugar de mostrar los contenidos normales de la ventana, es solo un bloque sólido de gris. Si luego arrastro esa ventana al monitor primario, en el segundo cruce el límite del monitor, se dibuja correctamente y puedo arrastrarlo de vuelta al monitor secundario. Si la ventana se crea en el monitor principal, siempre aparece perfectamente. NUNCA tuve este problema en XP, solo en Vista. No puedo probarlo fácilmente en Windows 7, ya que no tengo un monitor dual con Windows 7.¿Por qué nuestra aplicación Java no mostraría ventanas en el monitor secundario?

Cualquiera tiene cualquier ideas? ¿Es esto quizás un error conocido de Java? También estoy ejecutando el más reciente Java 1.6 SDK.

+0

Compruebe si el cliente de Java realmente debe repintar. –

+0

Podría intentar jugar con la clase GraphicsEnvironment. Esto le permite obtener una lista de todos los monitores conectados a la computadora. – Michael

+0

Tuve un problema similar en mi juego en el que si arrastraba la ventana a mi monitor secundario, se volvería blanco hasta que lo arrastrara hacia atrás. Después de arrastrarlo hacia atrás, la pantalla ya no se actualiza. – 8bitslime

Respuesta

12

Compruebe que el controlador de video y JRE están actualizados. (Es posible tener un JDK actual, pero un JRE antiguo.)

Java delegará el almacenamiento en búfer a DirectDraw y/o Direct3D. Puede desactivar esta con las siguientes opciones de JVM:

  • -Dsun.java2d.d3d=false
  • -Dsun.java2d.noddraw=true

hay otras opciones que se detallan here.

Si el monitor principal está a la derecha del monitor secundario, las posiciones de pantalla en el monitor secundario tendrán valores X negativos. (Del mismo modo, si el secundario está arriba, las posiciones primarias tendrán valores Y negativos). Es posible que exista un código que no maneje los valores negativos.

+0

Actualicé el controlador de video y revisé el JRE. Ningún cambio. Agregué las dos opciones de JVM mencionadas y el problema desapareció. ¡Gracias por el consejo! – Morinar

Cuestiones relacionadas