2009-05-15 20 views
5

Uno de los usuarios de un programa Java swing GUI que escribí está teniendo un problema donde la ventana principal no se muestra correctamente en la pantalla y la GUI se congela. He aquí una comparación de la pantalla en su pantalla (arriba) y lo que se supone a aparecer (abajo):Ventana corrediza Java Swing

alt text http://www.shapecollage.com/temp/SwingCorruption.jpg

Él se está ejecutando Windows XP SP3 con Java 1.6.0_13 y sus tarjeta gráfica es una ATI X1600 con una configuración de monitor dual.

El programa (si le gustaría probar por sí mismo) está en:
www.shapecollage.com/download.html

tengo varios miles de usuarios y nadie más ha informado de este error y he probado a fondo en Windows XP. Todo lo computacional se realiza en un hilo separado del hilo de la interfaz gráfica de usuario regular y el programa funciona en muchas otras computadoras, por lo que no creo que sea un problema con el programa en sí, sino que algo falla con su configuración particular.

¿Alguien ha visto este tipo de error anteriormente en un sistema o tiene alguna sugerencia sobre qué podría estar mal en el sistema de este usuario que podría causar tal problema?

Gracias,
Vicente

+1

Interesante. Tal problema me fue reportado uno o dos años atrás; Nunca pude reproducirlo, así que lo cerré como probablemente un error del controlador. Me interesaría ver si alguna buena respuesta aparece aquí. –

+0

¡Yikes! Para que sea tan malo, debe ser una cosa del controlador jvm vs graphics - dudo que haya mucho que puedas hacer. – Tom

+0

Una vez que se carga el programa, hay algunos artefactos menores, pero obvios en el procesamiento, y cuando se intenta utilizar realmente la interfaz, aparentemente se vuelve loca y se congela. No puedo replicar esto en mi escritorio o en varias otras computadoras. – Vincent

Respuesta

2

Tuvimos un problema muy similar, que se solucionó al actualizar el controlador de gráficos. El problema podría provenir de la configuración de monitor dual que conduce a la corrupción de VRAM, por lo que su cliente podría intentar si funciona mejor con un solo monitor. Si bien es de esperar que Java no sea muy dependiente del hardware, nuestra aplicación de gráficos intensivos siempre logra BSOD cuando se ejecuta a través de un tipo de proyector particular ...

+0

El usuario actualizó su controlador de tarjeta gráfica y solucionó el problema. – Vincent

0

oscilación no es hilo de seguridad, por lo que si usted está haciendo la prestación en cualquier lugar que no sea el hilo de interfaz gráfica de usuario, se puede esperar este tipo de cosas.

+0

La representación solo se realiza en el hilo de la GUI. El programa funciona bien en miles de otras computadoras. – Vincent

1

No he visto ese tipo particular de gráficos corruptos, pero he visto que los problemas gráficos de Java en Windows desaparecen cuando se reduce la aceleración de hardware en el panel de control de pantalla extendida.

0

He visto gráficos corruptos como ese, pero nunca en Java. Los lugares que he visto estaban en windows draw/etc code, y el aspecto de mosaico y nieve generalmente indicaba algo así como decirle al código de dibujo que iba a dibujar una imagen de cierto tamaño y profundidad de bits, pero luego completaba el buffer de imagen con una profundidad de bits diferente. como llenar el conjunto de bytes con datos de una fuente RGBA entera y ponerlo en un destino RGB entero?

pero parece que el usuario también está ejecutando otro tipo de aplicación, ya que hay un botón adicional por los botones de minimizar/maximizar/cerrar, por lo que alguna otra aplicación de terceros está modificando la ventana . Tal vez eso es jugar con eso?

De lo contrario, diría el problema del controlador. Siempre hay algunas soluciones, como deshabilitar el dibujo d3d u otras optimizaciones de dibujo que la máquina virtual hace ahora automáticamente, ¿quizás eso lo resuelve?

6

Quizás haya una interacción problemática entre Java y el controlador de gráficos y/o hardware de gráficos.

Hay several flags that can influence how Java draws to the screen.

Es posible que desee para tratar de iniciar las aplicaciones con cualquiera de esas banderas:

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

Esas banderas alternar la tubería de OpenGL, a su vez de utilizar Direct3D y desactivar el uso de DirectDraw, respectivamente.

Si alguno de ellos resuelve su problema, entonces podría considerar presentar un error con el sol, porque entonces probablemente las aplicaciones no tienen la culpa aquí.

+1

Tuve un problema relacionado en el que -Dsun.java2d.d3d = false resolvió el problema. Ver http://stackoverflow.com/questions/848481/problem-with-painting-in-java-swing-app-in-java-1-6 – Avrom

+1

Año 2015: en Ubuntu 14.04, corrupción de gráficos en todos los controles gui, en mi propia aplicación y en aplicaciones de terceros que uso. El inicio de cualquiera de esos con -Dsun.java2d.opengl = true resolvió el problema. Esto sucede con las tarjetas de NVidia, creo que Intels está bien. –