5

タイトルが質問に完全に一致するかどうかは正直わかりませんが、とにかくここにあります。私はJavaで簡単なゲームを作成しています。このゲームでは、エイリアンの宇宙船が画面の上部から落下し、それらを殺さずに画面の下部に到達すると、宇宙ステーションがダメージを受けます。しかし、宇宙ステーションが破壊されるたびに、プレイヤーに死んだことを知らせるメッセージボックスが表示されなくなり、何度も何度もポップアップし続けます。そして、コンソールに、大きくなるのを止めないエラーメッセージが表示されます。これは私が宇宙ステーションの健康のために持っているコードです:

public class SpaceStation extends Entity {
public static int stationHealth = 100;

public SpaceStation(int x, int y) {
    super(x, y);
}

public void update() {
}

public void draw(Graphics2D g2d) {
    g2d.drawImage(ImageLocator.getSpaceStation(), 0, 595, null);

    // HEALTH BAR
    g2d.fillRect(5, 25, stationHealth, 10);

    if(stationHealth <= 0) {
        try{
            JOptionPane.showMessageDialog(null, "You died on level "
                    + GameFrame.level + ". Better luck next time!");
            GameFrame.mainTimer.stop();
            System.exit(0);
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
            System.exit(0);
        } 
    }
}

public Rectangle getBounds() {
    return new Rectangle(x, y, 600, 200);
}

}

どうやらエラーが発生している行はJOptionPane.showMessageDialog(null、"レベルで死亡しました"エラーメッセージは次のとおりです。

at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.InternalError: The current process has         used all of its system allowance of handles for Window Manager objects.

at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.InternalError: The current process has used all of its system allowance of handles for Window Manager objects.

お時間をいただきありがとうございます。

4

1 に答える 1

8

paintメソッド内からダイアログを開かないでください!draw(Graphics2D)または、おそらくよりドメイン固有であり、示唆されているように、別のクラスのpaintメソッドから呼び出される可能性のあるメソッドではそれを行わないでください。

私はあなたのコードがを呼び出すタイマーを持っていると推測することができるだけです、そしてそれは順番にまたはrepaint()への呼び出しを引き起こすかもしれません。ただし、これは、コンポーネントの上部に要素が表示される可能性があることをJRE自体が認識している場合は、JRE自体によっても実行されます。したがって、「無限ループ」。paint(Graphics)paintComponent(Graphics)JOptionPane

于 2012-08-21T01:38:45.437 に答える