我有一个使用BufferStrategy
由JFrame
对象创建的应用程序来绘制形状。该代码非常标准,您可以在其他地方找到:
// JFrame class
frame.setVisible( true );
frame.createBufferStrategy( 2 );
new Logic( frame.getBufferStrategy() ).loop();
// Logic class
public Logic( BufferStrategy bs ){
this.bs = bs;
}
public void loop(){
// looping should be in another thread
Thread loop = new Thread(new Runnable() {
public void run(){
looooooooop();
}
});
loop.start();
}
现在looooooooop
函数是绘图实际发生的地方:
g = (Graphics2D)bs.getDrawGraphics();
// draw stuff here, leaving out for simplicity
g.dispose();
bs.show();
Toolkit.getDefaultToolkit().sync();
现在问题是大约 75% 的时间应用程序启动并运行良好,另外 25% 的时间框架出现但只能看到框架的背景颜色,就像图形对象没有绘制一样屏幕上的任何东西。我已经尝试调试并弄清楚这个问题是否正在停止,但这样做真的很难。我认为这与在另一个线程中运行的逻辑循环有关(也许这解释了应用程序的不一致性质),但没有任何运气。这个问题是不是听起来很熟悉?谢谢!
编辑- 删除单独的线程后,这仍然会发生,所以不可能是因为这个。
编辑 2 - 似乎只有在启用全屏模式时才会发生这种情况(无论是否调用setVisible()
):
this.setVisible( true );
if(isFullScreen){
GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.setFullScreenWindow(this);
}
这是一个已知问题还是我错过了什么?谢谢!
编辑 3 - 这仅在 Ubuntu 上发生 - 通过蛮力验证。在网上找不到任何关于错误的信息,所以我不知道该怎么想。