gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 05:13:14 26 4
gpt4 key购买 nike

我用 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 中,输出为:
游戏开始
绘画
绘画
即将画画
绘画
即将画画
绘画
即将画画
绘画
...

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

我现在不知道还能尝试什么。尽管我付出了努力,但我仍然不完全理解 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();
}

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

关于Java repaint() 在浏览器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11730353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com