1

Eclipseで実行すると問題なく動作するJavaでゲームを作成しました。すべてが見栄えがよく、効果的に実行されます (少なくとも、何か他の方法を考え出すまでは)。だから私はそれを自分のウェブサイトに載せようとしてきましたが、ブラウザでゲームを実行するたびに、Java コンソールをチェックしてもエラーは表示されませんが、白い画面が表示されます。問題を画面の描画に絞り込むことができました。ゲームを実行して何かを起こすタイマーがあります。最後に、repaint() メソッドを呼び出します。Eclipse では問題なく動作しますが、ブラウザーでは何も起こりません。

関連するコードは次のとおりです (すべて FinalProject というメイン クラス内にあります)。

public class FinalProject extends JApplet implements ActionListener,
                          KeyListener, MouseListener, MouseMotionListener {
    public void init(){
        //...initialize program

        System.out.println("game started");
    }

    /**
     * A method called every so often by a timer to control the game world.
     * Mainly calls other functions to control objects directly, but this 
     * is used as the only timer, which also calls repaint() at it's end.
     */
    private void runGame(){
        //...Run game and do important stuff

        //This Draws The Screen
        System.out.println("about to paint");
        repaint();
    }

    public void paint(Graphics g){
        System.out.println("painting");

        //...paint screen
    }

    public void update(Graphics gr){
        System.out.println("updating");
        paint(gr);
    }
}

runGame() はタイマーによって呼び出されます。Eclipse で の 出力
は 次 の とおり です 。
_








これをブラウザーで実行すると (私のマシンでオフラインで直接実行し ます。すべての ブラウザーにも同じ問題があります)、コンソールに次のように表示され ます
。 basic: アプレットが表示されるようになりました basic: アプレットが開始されました basic: クライアントに通知されました アプレットが開始されます ペイントしようとしています ペイントしようとしています ペイント しようとしてい ます ...









この時点で他に何を試すべきかわかりません。私の努力にもかかわらず、repaint() が何をするのか正確にはまだ完全には理解できていません。ただし、ブラウザでは発生していないようです。Windows 7 64x と Java Version 7 Update 5 を使用しています。

4

1 に答える 1

0

結局のところ、問題はメニュー バーの削除にありました。しばらく前に、プログラムからメニュー バーを削除するコードを見つけましたが、問題なく動作しました。ただし、ブラウザに配置すると再描画が妨げられたようです。メニューバーを削除したために再描画が壊れた理由はわかりませんが、どうやらそうです。

私が(init()で)使用したコード:

Frame[] frames = Frame.getFrames();
for (Frame frame : frames){
    frame.setMenuBar(null);
    frame.pack();
}

このコードは、希望どおりにメニュー バーを削除しましたが、オンラインになるたびにプログラムを爆発させました。これを削除すると、問題が修正されました。幸いなことに、メニュー バーはいずれにせよオンラインでは表示されないため、このコードを削除しても大きな損失はありません。

于 2012-07-31T03:54:20.197 に答える