繁体   English   中英

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

[英]Java repaint() Doesn't Work In Browser

我用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开始
基本:已启动告诉客户小程序
即将油漆
即将油漆
即将油漆
...

我目前不知道还能尝试什么。 尽管我付出了很多努力,但我仍然不太完全了解repaint()的作用,我所知道的是它最终将调用update()和paint()。 除非浏览器似乎没有发生这种情况。 我将Windows 7 64x与Java Version 7 Update 5一起使用。在此先感谢您的帮助。

原来,问题出在删除菜单栏。 不久前我发现了一些代码,该代码将从程序中删除菜单栏,并且可以正常工作。 但是,当放置在浏览器中时,似乎阻止了重新绘制。 我不知道为什么重新粉刷由于删除菜单栏而中断,但显然可以。

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

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

此代码确实删除了所需的菜单栏,但每当程序联机时也会分解该程序。 删除此问题已解决。 幸运的是,菜单栏无论如何都不会在线显示,因此删除这些代码不会给您带来太多损失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM