2016-07-18 91 views
1

我的桌面應用程序滯後。我認爲在java.awt.image.BufferStrategy中有些問題。BufferStrategy滯後

private void render() { 
    BufferStrategy bs = this.getBufferStrategy(); 

    if (bs == null) { 
     this.createBufferStrategy(3); 
     return; 
    } 
    // drawing 
    Graphics g = bs.getDrawGraphics(); 

    g.dispose(); 
    bs.show(); 
    Toolkit.getDefaultToolkit().sync(); 
} 

我甚至沒有開始繪畫。我在另一個項目中使用了相同的東西,例如,如果render方法看起來像這樣,它就可以正常工作。

private void render(){ 
BufferStrategy bs = this.getBufferStrategy(); 

    if (bs == null){ 
     this.createBufferStrategy(3); 
     return; 
    } 
    // drawing 
    Graphics g = bs.getDrawGraphics(); 
    g.setColor(Color.GRAY); 
    g.fillRect(0, 0, getWidth(), getHeight()); 
    int row; // Row number, from 0 to 7 
    int col; // Column number, from 0 to 7 
    int x,y; // Top-left corner of square 

    for (row = 0; row < 8; row++) { 
     for (col = 0; col < 8; col++) { 
      x = col * 70; 
      y = row * 70; 
      if ((row % 2) == (col % 2)) 
       g.setColor(Color.white); 
      else 
       g.setColor(Color.black); 
      g.fillRect(x, y, 70, 70); 
     } 
    } 
    g.dispose(); 
    bs.show(); 
    Toolkit.getDefaultToolkit().sync(); 
} 

核心的東西是一樣的。爲什麼第一個滯後於相同的條件?

+0

沒有'Toolkit.getDefaultToolkit()同步(); 「我甚至無法終止我的節目。鼠標開始移動緩慢。 – Dexxrey

回答

0

嘗試移除:

for (row = 0; row < 8; row++) { 
    for (col = 0; col < 8; col++) { 
     x = col * 70; 
     y = row * 70; 
     if ((row % 2) == (col % 2)) 
      g.setColor(Color.white); 
     else 
      g.setColor(Color.black); 
     g.fillRect(x, y, 70, 70); 
    } 
}