2016-07-18 66 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); 
    } 
}