Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java repaint()不';不能在浏览器中工作_Java_Paint_Repaint - Fatal编程技术网

Java repaint()不';不能在浏览器中工作

Java repaint()不';不能在浏览器中工作,java,paint,repaint,Java,Paint,Repaint,我已经用Java制作了一个游戏,当我在Eclipse中运行它时,它不会有任何问题。每件事看起来都很棒,而且做得很有效(至少在我想出其他办法之前是这样)。所以我一直试图把它放在我的网站上,但每当我在浏览器中运行游戏时,我只会看到一个白色的屏幕,尽管检查Java控制台不会显示任何错误。我已设法把问题缩小到屏幕的油漆上。我有一个计时器,可以运行游戏,让事情发生。最后,它调用repaint()方法。在Eclipse中,这很好,但在浏览器中,什么都没有发生 以下是相关代码(所有代码都在名为FinalPro

我已经用Java制作了一个游戏,当我在Eclipse中运行它时,它不会有任何问题。每件事看起来都很棒,而且做得很有效(至少在我想出其他办法之前是这样)。所以我一直试图把它放在我的网站上,但每当我在浏览器中运行游戏时,我只会看到一个白色的屏幕,尽管检查Java控制台不会显示任何错误。我已设法把问题缩小到屏幕的油漆上。我有一个计时器,可以运行游戏,让事情发生。最后,它调用repaint()方法。在Eclipse中,这很好,但在浏览器中,什么都没有发生

以下是相关代码(所有代码都在名为FinalProject的主类中):

runGame()由计时器调用。在Eclipse中,输出为:
游戏开始了
绘画
绘画
即将绘画
绘画
即将绘画
绘画
即将绘画
绘画

在浏览器中执行此操作时(直接在我的计算机上脱机运行。所有浏览器也有相同的问题),控制台显示:
…(正在加载内容)
游戏开始了
基本:小程序已初始化
基本:启动小程序
基本:已完成性能汇总
基本:使小程序可见
基本:小程序已启动
基本:通知客户端小程序已启动
即将绘画
即将绘画
即将绘画


我不知道在这一点上还有什么可以尝试的。尽管我做了很多努力,但我仍然不能完全理解repaint()到底做了什么,我只知道它最终调用了update()和paint()。但这在浏览器中似乎没有发生。我正在使用Windows764X和Java版本7更新5。提前感谢您的帮助。

结果是,问题出在移除菜单栏上。我在不久前发现了一些代码,它可以从程序中删除菜单栏,并且工作起来没有任何问题。然而,它似乎阻止了它在浏览器中重新绘制。我不知道为什么重新粉刷会因为移除菜单栏而中断,但显然是这样

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


这段代码确实根据需要删除了菜单栏,但也在程序上线时分解了它。删除此选项修复了此问题。幸运的是,菜单栏无论如何都不会在线显示,因此删除这段代码不会造成太大损失。

我没有任何问题。但是,我确实将您的
update
方法改为调用
super.update(g)
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);
    }
}
Frame[] frames = Frame.getFrames();
for (Frame frame : frames){
    frame.setMenuBar(null);
    frame.pack();
}