JFrame beim Vergrößern schwarz?!

mccae

Senfdazugeber
Hallo,

Ich habe ein kleines Problem Swing betreffend.
Nach diesem habe ich bereits recherchiert, jedoch keine befriedigende Antwort gefunden.

Das folgende Problem tritt nur unter Windows 7 auf:

Jedes Swing Fenster (JFrame, JDialog,..) füllt sich, sobald es vergrößert wird, bei den zu rendernden Bereichen schwarz.

Wird das Fenster also größer gezogen, erscheint der zu füllende Bereich schwarz - erst nach einer Sekunde füllt sich dieser mit den Komponenten.

Bei undekorierten Frames ohne native Controls und Border geschieht jedoch etwas anderes:
Das ganze Fenster flackert schwarz!

Alles passiert nur unter Swing, AWT und SWT sind nicht von diesem Problem betroffen.

Hier ein Screenshot: (edit: jetzt dem post angehängt)
swingresizeproblem.jpg

Schon komisch oder?

Existiert eine Möglichkeit dieses Verhalten zu unterdrücken?

Gibt es nicht vielleicht die Möglichkeit diesen "schwarzen" Bereich anders einzufärben, sodass dieser im "Systemgrau" (Default JPanel background) erscheint und nicht so auffällig ist?

Vielen Dank im Voraus,
Martin.
 
Zuletzt bearbeitet:
1) Verwende bitte die Anhangs-Option hier im Forum. Das Problem bei Fremd-Hostern ist das die Bilder irgendwann gelöscht werden und somit nicht mehr zugänglich sind.

2) Ich habe über dieses Problem bereites gepostet : http://www.tutorials.de/java/377460-java-d3d-und-ati-ccc2.html
Das Problem tritt in Verbindung mit ATI-Grafikkarten , der Treiber-Version 11.x und dem CatalysControlCenter2 auf. Die einzige Möglichkeit dieses Problem zu behen ist das D3D-Rendering von Java mit Hilfe des Parameters
Code:
-Dsun.java2d.d3d=false
zu deaktivieren. Bei verwenden von OpenGL statt D3D treten unter Umständen ebenfalls Darstellungsfehler auf wesshalb ich von dieser Option ebenfalls abrate.
 
Wenn es bei dir nicht an der Grafikkarte liegt, dann vielleicht daran, dass du zu viel Rechenleistung beim repainten verbrauchst. Hast du irgendwelche paint() oder paintComponent()-Methoden überschrieben? Ist deine CPU-Auslastung hoch?
Ist doubleBuffering aktiviert?

Etwas seltsames:
Ich nutze Ubuntu 11.04 auf einer Intel iGPU und bei mir tritt der Fehler nur mit Opera auf. Swing-Anwendungen (genauso SWT) zeigen diese Flächen im normalen Hintergrundfarbton (bei mir Grau)
 
Hallo,

Vielen Dank für eure Antworten!

@SPiKEe:
Nun, ich besitze keine ATI Grafikkarte.
Ich kann nur bestätigen, dass dieses Problem auch unter meinen Nvidia Systemen auftaucht.
Auf allen 3 Systemen mit 1x GeForce 7900GTX und einem alten Treiber, 1x 570GTX und 1x 590GTX mit den Treibern der 270er Serie sowie den 280er Beta Treiben, jeweils immer unter Windows 7 x64.

Auch auf meinem Laptop mit einem Intel Grafikchip tritt dieses Problem auf (auch Windows 7 x64).

"-Dsun.java2d.d3d=false" behebt das Problem nicht, es macht es nur "erträglicher".
Das Renderingproblem tritt immer noch auf, jedoch reduziert sich die schwarze Fläche auf eine Höhe, bzw. Breite von etwa 20px.

Ein Repaint scheint also schneller vonstatten zu gehen.

Besser als gar nichts ist es allemal.

Nun, was ich noch probiert habe:

Die 32bit Version der JVM, sowie das neue Java 7. Dito.


@genodeftest:
Das Problem tritt bei mir zumindest immer auf - unabhängig vom Inhalt des JFrames.
Das ganze hat in meinen Augen nichts mit der CPU Auslastung zu tun.

Was Double-Buffering betrifft: Ist Swing nicht von Haus aus schon double buffered?!
Ich meine ja.


Das Problem ist ja nichts neues...
Es ist nur merkwürdig, dass es dafür keine befriedigende Lösung gibt.

mfg,
Martin C. Caesar
 
Ja, stimmt eigentlich, Swing sollte von Haus aus DoubleBuffering aktiviert haben. Da das Control Panel betroffen ist, kann man auch ausschließen, dass Programmierfehler von dir vorliegen.
Welche JREs/JDKs hast du probiert?
Alles auf deinem Windows 7 64Bit?
 
Hallo,
Welche JREs/JDKs hast du probiert?
Alles auf deinem Windows 7 64Bit?

Ich habe folgendes durchprobiert:

Code:
Sun JavaSE		1.6.0_26  x86	auf Windows 7 64bit
Sun JavaSE		1.6.0_26  x64	auf Windows 7 64bit
Sun JavaSE		1.7.0_00  x64	auf Windows 7 64bit

Das Problem tritt auf allen 3 meiner PCs auf, sowie auf meinem Laptop unter Windows 7 x64.
Leider kann ich keine x86 JRE auf einem x86 Win 7 testen, da mir dieses leider nicht zu Verfügung steht.

Erwähnenswert wäre vielleicht, dass das Problem auf dem Notebook meines Vaters nicht auftritt.
Dieses verwendet ein Windows XP SP3 x86.

Der Vollständigkeit halber:
Code:
Sun JavaSE		1.6.0_26  x86	auf Windows XP SP3 32bit - kein Renderingproblem!

Das Ganze ist total "strange".

Es wäre interessant zu wissen, ob dieses Problem auch unter der 32bit Version von Windows 7 auftritt.

Ich habe jetzt keine Lust 2 Jahre alten Swingcode auf SWT zu portieren.
Da spring' ich lieber von der Hubschrauberplattform.

mfg,
Martin C.

PS

Das mit dem Sprung von der Plattform meine ich natürlich nicht ernst.
 
Also da ich ja auch mehr als einen Rechner habe auf dem mein Win7 läuft kann ich ein solches Problem zumindest bei nVid-Karten der 9000er Serie ausschließen *ebenfalls Java7* *9k einfach aus Kosten-Gründen da die Karte keine Leistung bringen soll sondern lediglich 3D-fähigkeiten bei der die On-Board-GPU versagt*.

Dass das deaktivieren des D3D-Rendering den Fehler nicht begebt aber zumindest ein Anfang ist hätte ich so nicht erwartet. Auch der Hinweis von genode das das ControlPanel betroffen ist *hab ich wohl überlesen* lässt auf ein System weites Problem schließen. Das es allerdings bei 3 verschiedenen Systemen auf welchen jeweils die selbe Windows und Java Version läuft das Problem nahezu identisch ist haut mich gerade erlich gesagt etwas aus den Socken.

Erlich gesagt hab ich jetzt keine Idee was es sein könnte , geschweige denn einen Lösungsvorschlag. Da bin ich mal drauf gespannt was der Fehler und vor allem die Lösung ist.

//EDIT
Welches Win7 genau ? Pro oder Ulti ?
 
Huhu,

Ich werde sogleich das OpenJDK und einige andere Sachen ausprobieren.

Und @SPiKEe:
Ja, anscheinend scheint es wirklich an der Runtime selbst zu liegen.

Um auf deine Frage zurückzukommen:
Ich verwende weder Professional noch Ultimate sondern Home Premium.

Komisch ist nur, dass das Problem auf meiner 9800er auftritt, und bei dir nicht.

Na ja, ich werde diesen Post aktualisieren sobald es etwas neues gibt.

EDIT:
Die Sache mit dem OpenJDK ist mir doch zu aufwändig, da ich die Sache selbst kompilieren muss, worauf ich gerade keinen Bock habe.

Inzwischen habe ich versucht eine Applikation bei deaktiviertem AERO zu starten.
Das Problem tritt immer nochauf, interessant ist jedoch, dass die Füllfarbe nicht mehr Schwarz ist, sondern der "Fensterfarbe" entspricht. In meinem Fall hellblau.

mfg,
Martin C.
 
Zuletzt bearbeitet:
Naja .. gut ... wie es unter einem "HOME" ist weis ich nicht da ich seit 2000 alles was HOME im Namen hat grundsätzlich erstmal wegwerfen und mir mindestens Pro besorge. Was Vista angeht : Schrott -> Tonne.
Ob es jetzt einen Unterschied macht ob man nun HOME oder Ultimate hat weis ich nicht ... da ich mich persönlich nicht auf HOME herablassen werde da ich einige Funktionen welche nur in Ultimate enthalten sind benötige.

Die Karte in meinem anderen Rechner ist übrigens nur eine 9500er ... auch hier weis ich nicht ob es einen Unterschied macht.
 
Zurück