2009-05-15 21 views
5

Uno degli utenti di un programma Java swing GUI che ho scritto sta avendo un problema in cui la finestra swing principale non viene visualizzata correttamente sullo schermo e la GUI si blocca. Ecco un confronto dello screenshot sul suo schermo (in alto) e quello che dovrebbe presentarsi (in basso):Corrupted Java Swing Window

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

Egli è in esecuzione Windows XP SP3 con Java 1.6.0_13 e la sua scheda grafica è un'ATI X1600 con un doppio set-up del monitor.

Il programma (se si desidera testare per voi stessi) e ':
www.shapecollage.com/download.html

Ho diverse migliaia di utenti e nessun altro ha segnalato questo errore ed ho testato a fondo su Windows XP. Qualunque cosa computazionale è fatta in un thread separato da quello del normale thread GUI e il programma funziona su molti altri computer, quindi non penso che sia un problema con il programma stesso, ma piuttosto qualcosa di sbagliato nel suo particolare set-up.

Qualcuno ha mai visto questo tipo di errore su un sistema o ha suggerimenti su cosa potrebbe essere sbagliato sul sistema di questo utente che potrebbe causare un tale problema?

Grazie,
Vincent

+1

Interessante. Tale questione mi è stata riportata un anno o due indietro; Non potrei mai riprodurlo, quindi l'ho chiuso come probabilmente un bug del driver. Sarò interessato a vedere se qualche buona risposta si presenta qui. –

+0

Yikes! Per essere così male deve essere una cosa da jvm vs driver di grafica - dubito che ci sia molto che puoi fare. – Tom

+0

Una volta caricato il programma, ci sono alcuni artefatti minori, ma ovvi nel rendering, e quindi quando si tenta di usare effettivamente l'interfaccia, apparentemente impazzisce e si blocca. Non riesco a replicarlo sul mio desktop o su altri computer. – Vincent

risposta

2

Abbiamo avuto un problema molto simile, che è stato risolto aggiornando il driver grafico. Il problema potrebbe derivare dall'impostazione del doppio monitor che porta alla corruzione della VRAM, quindi il cliente potrebbe provare a farlo funzionare meglio con un solo monitor. Mentre è probabile che Java non sia molto dipendente dall'hardware, la nostra applicazione intensiva per la grafica è sempre in grado di eseguire BSOD quando si esegue un particolare tipo di proiettore ...

+0

L'utente ha aggiornato il driver della scheda grafica e ha risolto il problema. – Vincent

0

swing non è thread-safe, quindi se si sta facendo il rendering ovunque diverso dal thread GUI, ci si può aspettare questo genere di cose.

+0

Il rendering viene eseguito solo nel thread della GUI. Il programma funziona bene su migliaia di altri computer. – Vincent

1

Non ho visto quel particolare tipo di grafica danneggiata, ma ho visto problemi di grafica Java su Windows scomparire quando l'accelerazione hardware nel pannello di controllo del display esteso è ridotta.

0

Ho visto grafica danneggiata come quella, ma mai in java. I luoghi che ho visto erano in windows draw/codice etc, e l'aspetto piastrellatura e neve in genere indicava qualcosa come dire al codice di disegno dell'immagine che stavi per disegnare un'immagine di una certa dimensione e profondità di bit, ma poi riempire il buffer di immagini con diversa profondità di bit. come riempire l'array di byte con i dati provenienti da una fonte RGBA intera e metterli in una destinazione RGB intera?

ma dalla schermata, l'utente sembra che stia eseguendo anche un altro tipo di app, in quanto c'è un pulsante in più nei pulsanti minimizza/massimizza/chiudi, quindi alcune altre applicazioni di terze parti stanno modificando la finestra . Forse questo sta scherzando?

Altrimenti direi problema di driver. Ci sono sempre alcune soluzioni come disabilitare il disegno di d3d o altre ottimizzazioni di disegnare che la macchina virtuale fa automaticamente ora, forse che lo risolve?

6

Forse c'è un'interazione problematica tra Java e il driver grafico e/o l'hardware grafico.

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

Si potrebbe desiderare di provare ad avviare le applicazioni con una di queste bandiere:

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

quelle bandiere alternare la pipeline OpenGL, turno di usare Direct3D e disabilita l'uso di DirectDraw rispettivamente.

Se qualcuno di questi risolve il tuo problema, potresti prendere in considerazione l'idea di archiviare un Bug con il sole, perché in questo caso probabilmente non sono le applicazioni a essere colpevoli.

+1

Ho riscontrato un problema correlato in cui -Dsun.java2d.d3d = false ha risolto il problema. Vedere http://stackoverflow.com/questions/848481/problem-with-painting-in-java-swing-app-in-java-1-6 – Avrom

+1

Anno 2015: In Ubuntu 14.04, la corruzione grafica in tutti i controlli dell'interfaccia grafica, nella mia applicazione e nelle applicazioni di terze parti che uso. Avviare qualcuno di quelli con -Dsun.java2d.opengl = true ha risolto il problema. Questo succede con le schede NVidia, penso che gli Intels siano OK. –