Java repaint()在浏览器中不起作用

时间:2012-07-30 22:04:24

标签: java paint repaint

我在Java中制作了一款游戏,当我在Eclipse中运行时,它可以毫无问题地运行。一切看起来都很棒并且有效地完成了(至少在我想出其他事情之前)。所以我一直试图把它放在我的网站上,但每当我在浏览器中运行游戏时,我只是得到一个白色的屏幕,虽然检查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中,输出是:
游戏开始了 绘画
绘画
即将上漆 绘画
即将上漆 绘画
即将上漆 绘画
...

在浏览器中执行此操作(直接在我的计算机上脱机运行。所有浏览器也有同样的问题),控制台显示:
......(装货)
游戏开始了 基本:Applet初始化
基本:启动applet
基本:完成性能累积
基本:小程序可见 基本:Applet开始了 基本:Told客户applet启动
即将上漆 即将上漆 即将上漆 ...

我不知道还有什么可以尝试。尽管我付出了努力,但我仍然无法完全理解repaint()的作用,我所知道的是它最终会调用update()和paint()。除了在浏览器中似乎没有发生。我正在使用Windows 7 64x和Java Version 7 Update 5.提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

原来,问题在于删除菜单栏。我刚刚发现了一些代码,它会从程序中删除菜单栏,它没有任何问题。但是,它似乎在放置在浏览器中时无法重新绘制。我不知道为什么重新粉刷因为删除菜单栏而破坏,但显然确实如此。

我使用的代码(在init()中):

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

此代码确实删除了所需的菜单栏,但每当它被放到网上时也会爆炸。删除此修复了该问题。幸运的是,菜单栏无论如何都不会显示在网上,因此您不会因删除这些代码而损失太多。