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 でのみ発生しています - 力ずくで検証されています。バグに関してオンラインで何も見つからないため、どう考えればよいかわかりません。