Graphics, synchronized und Arithmetische if / else Notation

Padawan

Erfahrenes Mitglied
Hallo alle zusammen,

habe da eine kurze und frage. Die Bezieht sich auf den folgenden Code:

Java:
....
boolean isActive,  showTTisActive, showTT;
protected Color fillColor,  lineColor, fillColorInside, lineColorInside;
....
public void paint(Graphics g){
	if (g != null){
	    synchronized(g){
		Color fi = ((isActive)?(fillColorInside):(fillColor));
		Color li = ((isActive)?(lineColorInside):(lineColor));
               if (!showTT && showTTisActive){
                    System.out.println("versuche TT zu übermalen");
                    g.setColor(canvas.getBackground());
                    int fh = g.getFontMetrics().getHeight();
                    g.drawString(pName, this.xpoints[0]+5, this.ypoints[0]+fh);
                    g.drawString(pTime, this.xpoints[0]+5, this.ypoints[0]+2*fh);
                    showTTisActive = false;
                }
                ....
            }
         }
}

Die frage ist, in der Teile 2 in der if-Abfrage wird ja geprüft, ob z.B irgendetwas gezeichnet ist bzw. "angegeben wurde". Was bedeutet aber:
Java:
synchronized(g){
und z.B
Java:
Color fi = ((isActive)?(fillColorInside):(fillColor));
Wird dabei entweder die Farbe in der Variable fillColorInside oder fillColor ausgewählt?

lg Padawan
 
Hi

Beim if wird nicht geprüft, ob etwas gezeichnet wurde,
sondern ob überhaupt ein Graphics-Objekt vorhanden ist.
Wenn es null wäre würde der Code im if Exceptions produzieren
-> ohne Behandlung Absturz.

synchronized verhindert, dass es Probleme gibt,
wenn mehrere Threads das gleichzeitig verwenden.

Und die letzte Codezeile ist eine Art verkürztes if-else.
Gleichbedeutend mit
Java:
Color fi;
if(isActive)
    fi = fillColorInside;
else
    fi = fillColor;
 
Zurück