Problem mit repaint()

Hallo,

warum wird die Methode update() von Der Mathode repaint() manchmal nicht aufgerufen?

Bei mir ist JRE-Version 1.5.0_02 installiert, kann es daran liegen?

so sieht meine Programm aus, was mache ich falsch?

private void run{
currentIndex = startIndex;
boolean imageload = false;

try {
while ( noStopRequested ) {

if( imageload == true ) {
tracker.removeImage(myImage);
myImage.flush();
myImage = null;
}
try
{
myImage = ImageIO.read(new URL(urlString));
}
catch (IOException ae)
{
System.out.println(ae.toString());
}
tracker.addImage(myImage, 0);
tracker.waitForAll();
imageload = true;

repaint();

Thread.sleep( sleepTime );
}
} catch ( InterruptedException x ) {
Thread.currentThread().interrupt();
}
}

public void paint(Graphics g) {
raster(g); // zeichnen eines rasters
koordinatenSystem(g); //zeichnen der achsen
beschriftung(g); //einfuegen der achsen beschriftung
Font font;
font = new Font(„Arial“,Font.PLAIN,30);
g.setFont(font);
g.drawString(„Live image“,titleIndex, 35);
if( myImage != null ) {
g.drawImage(myImage, calcPosX(xMin)+4, calcPosY(yMax)+4,
(int)appletWidth - 4, (int)appletHight - 4, this);//Bild
}
}

public void update(Graphics g) {
paint(g);
}

Gruss.
Hicham

Moin

warum wird die Methode update() von Der Mathode repaint()
manchmal nicht aufgerufen?

Dazwischen liegt der RepaintManager von Swing. Der ist manchmal ein bisschen strange. Klassisches Beispiel: ruf 2x direkt hintereinander repaint(100) auf. Der Repaintmanager wird maximal einmal update und entsprechend auch maximal 1x paint aufrufen. Wie gesagt: maximal. Er kann es auch 2x aufrufen. Oder öfter. Das weiss man nicht.

Anderes Beispiel: wenn sich das Object (laut repaintmanager) seit dem letzten repaint nicht verändert haben kann wird das paint direct aufgerufen. Aber nicht immer.

Bei mir ist JRE-Version 1.5.0_02 installiert, kann es daran
liegen?

In 1.5.0 kommt unter Windows noch ein Scherz hinzu: Da benutzt Swing als Renderung-backend OpenGL.

Und ich seh in deinem Code keinerlei Synchronisierung. Zusammen mit dem OpenGL-Teil und dem RepaintManager (2 unterschiedliche Threads) muss der Code ja gar lustige Dinge tun …

cu

Moin

Und ich seh in deinem Code keinerlei Synchronisierung.
Zusammen mit dem OpenGL-Teil und dem RepaintManager (2
unterschiedliche Threads) muss der Code ja gar lustige Dinge
tun …

cu

Hallo,

vielen Danke für die Antwort.

Wie kann ich OpenGL-Teil und RepaintManager synchronisieren?

Gruss.
Hicham