Newsgroup: it.comp.java
Titolo: (HELP disperato!) Perche' fa cosi'?!? (lungo, scusate)

Grazie all' aiuto di TelespallaBob finamente ho risolto il mio problema con
la doppia bufferizzazione ... ma ne e' insorto un altro!
In questa applicazione si muove una pallina gialla con i tasti freccia e
intanto un rettangolo in alto cambia colore random da solo.
Il problema e' che alla partenza il rettangolo non cambia colore ma resta
fermo sul primo colore mentre muovendo le freccette la pallina rimane ferma
....pero' se si passa una finestra a caso di Window sopra l'applicazione
(coprendola) e poi togliendola il tutto rimane ancora fermo ma la pallina si
e' magicamente postata e il rettangolo ha cambiato colore!
Cosa puo' essere?!?!?!?!?!?
Ho allegato il listato, scusate ma sono veramente disperato!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
public class Pippo extends Frame implements Runnable, KeyListener {
 int pacX;
 int pacY;
 Thread thethread;
 Graphics gout; // per il medoto della...
    Image img; // ...doppia bufferizzazione
    int key;
    boolean fComponentsAdjusted = false;
 public static void main (String args[]) {
  try {
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  } catch (Exception e) {
   System.err.println("Impossibile utilizzare lo stile di sistema: " + e);
  }
  Frame appl = new Pippo();
  WindowListener l = new WindowAdapter() {
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  };
  appl.addWindowListener(l);
 }
    public Pippo() {
  super("Pippo");
  setBackground(Color.black);
  setLayout(null);
  setSize(400,400);
  setVisible(true);
  addKeyListener(this);
  requestFocus();
}
 public void addNotify() {
  super.addNotify();
  img = createImage(getSize().width, getSize().height);
  gout = img.getGraphics();
  if (fComponentsAdjusted) return;
  pacX = (getSize().width)/2;
  pacY = (getSize().height)/2;
  fComponentsAdjusted = true;
 }
 public void keyPressed(KeyEvent e) {
  key = e.getKeyCode();
  switch (key) {
   case 38:
    pacY -= 10;
    break;
   case 39:
    pacX += 10;
    break;
   case 40:
    pacY += 10;
    break;
   case 37:
    pacX -= 10;
    break;
  }
 }
 public void keyReleased(KeyEvent e) { }
 public void keyTyped(KeyEvent e) { }
 public void DrawPallina() {
  gout.setColor(Color.yellow);
  gout.fillOval(pacX, pacY, 20, 20);
 }
 public void Rect() {
  float red, blue, green;
  red = (float)Math.random();
  green = (float)Math.random();
  blue = (float)Math.random();
     gout.setColor(new Color(red,green,blue));
  gout.fillRect(20, 20, 100, 10);
 }
   public void run() {
     long starttime;
  Graphics g;
     Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
     g=getGraphics();
     while(true) {
     starttime=System.currentTimeMillis();
      try {
    paint(g);
         starttime += 30;
         Thread.sleep(Math.max(0, starttime-System.currentTimeMillis()));
      } catch (InterruptedException e) { break; }
        }
    }
    public void paint(Graphics g) {
  gout.setColor(Color.black);
  gout.fillRect(0, 0, getSize().width, getSize().height);
  Rect();
   DrawPallina();
     g.drawImage(img, 0, 0, this);
 }
 public void start() {
  if (thethread == null) {
     thethread = new Thread(this);
      thethread.start();
  }
 }
 public void stop() {
  if (thethread != null) {
      thethread = null;
     }
 }
 public void destroy() {
  gout.dispose();
 }
 public void update(Graphics g) {
  paint(g);
 }
}
--
Drac (o Drachetto)
Area 5.1, HT-Group, it.hobby.home-cinema, 
www.ihhc.net
#207 de I FeSTosi, it.fan.scrittori.tolkien, 
www.imladris.immaginario.net

 public void keyPressed(KeyEvent e) {
  key = e.getKeyCode();
  switch (key) {
................
.................
................
  }
  repaint();
 }
ciao


In effetti funziona ma il quadrato in alto cambia colore solo quando mi
muovo.
Purtroppo il codice che ho scritto e' l'esemplificazione di un' altro
esercizio ben piu' grande in cui devo fare il repaint nel metodo run(),
cioe' da solo autonomamente, e non soltanto quando muovo il pacman.
Perche' npn funziona il repaint 'inifinito' nel metodo run()? Mi puoi ancora
aiutare? Grazie comunque di cuore