2011-09-11 76 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,幫助線程/擺動

正在發生的事情是打印語句運行,並且在它們全部運行之後,它會生成一行白色JPanel,而不是在它們應該設置爲紅色和白色時設置它們。任何線索什麼是錯的?

+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瞭解更多信息和解決方案。