2011-09-11 14 views
0
import java.awt.Color; 


public class bullet { 

    public bullet(int x, int y, boolean up) 
    { 
     System.out.println("Called");  
     int start = up?15-y:Math.abs(y-15); 
     int cNt = 0; 
     System.out.println("Start - " + start); 

     for(int i=start;15>start;start++) 
     { 
      try { 
       System.out.println("Its red"); 
       engineMenu.staticSGC(x,cNt,Color.RED); 
       Thread.sleep(300); 
      } catch (InterruptedException e) {} 

      System.out.println("White - " + i + "," + cNt); 
      engineMenu.staticSGC(x,cNt,Color.WHITE); 
      cNt += 1; 
     } 
    } 

} 

すべてのengineMenu.staticSGCは、JPanelの色を変更します。Java、スレッド/スイングのヘルプ

何が起こっているのかは、実行された印刷ステートメントが実行された後に、それらが実行された後で、白いJPanelsを赤に設定するのではなく白に設定します。どんな手掛かりが間違っていますか?

+0

はい、イベントスキャッチスレッドまたはEDTと呼ばれるメインのSwingスレッドでこのコードを呼び出しています。あなたのThread.sleep(...)はメインスレッドを縛ることによってGUIをスリープ状態にしています。これを[SwingWorker](http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html)が提供するようなバックグラウンドスレッドで行うか、Swing Timerを使用します。 –

答えて

1

EDTでコードを実行していると思いますが、sleep()メソッドはGUIの再描画を妨げています。

詳細については、Concurrency in Swingを参照してください。