【发布时间】:2014-12-28 15:57:38
【问题描述】:
我有一个应用程序使用由JFrame 对象创建的BufferStrategy 来绘制形状。该代码非常标准,您可以在其他地方找到:
// 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 上 - 通过蛮力验证。在网上找不到任何关于错误的信息,所以我不知道该怎么想。
【问题讨论】:
-
您是否尝试过循环内容状态,正如 Oracle 在此处演示的那样:java.awt.image.BufferStrategy?
-
@Obicere 我不想说这并没有解决我的问题,但我的应用程序现在运行得更顺畅了。谢谢!
标签: java java-2d bufferstrategy