Einige Benutzer unserer Swing-Anwendung haben verrückte Artefakte auf dem Display angezeigt. Dies reicht von Komponenten, die sich für ein oder zwei Sekunden nicht richtig übermalen, bis hin zu ganzen Teilen der Anwendung, die wie Kacheltapeten über Bereiche des Fensters neu gestrichen werden.Was ist der beste Weg, mit AWT Graphics Kontexten umzugehen?
Die App wurde von Entwicklern aller Ebenen zwischen erfahrenen Java-Jungs zu jungen Chaps direkt von der Universität im Laufe von fünf Jahren oder so gearbeitet, und wie Sie es erwarten, ist ein Teil des AWT-Code ein absolutes Chaos. Ich stehe nun vor der Aufgabe, in den nächsten Monaten so viel Böses wie möglich zu korrigieren.
Einige davon sind einfach zu handhaben. Behandeln Sie Komponenten nur im Event-Dispatch-Thread, IO asynchron, und ich hoffe, dass ich die Nachricht an den Rest des Teams weiterleiten kann.
Was ich gerne wissen würde, ist der beste Weg, mit Graphics-Kontexten umzugehen, besonders in einem paintComponent() - Kontext. Ich sehe eine Menge ...
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gfx = (Graphics2D)g;
// ...Whole lotta drawing code...
}
Ist es besser, dies zu tun?
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D gfx = (Graphics2D)g.create();
// ...Whole lotta drawing code...
gfx.dispose();
}
Wenn der g-Parameter in anderen Farben wiederverwendet werden wird dann brauche ich nicht, es zu einem guten Zustand wiederherzustellen, rückgängig machen AffineTransforms usw.?