我在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.提前感谢您的帮助。
答案 0 :(得分:0)
原来,问题在于删除菜单栏。我刚刚发现了一些代码,它会从程序中删除菜单栏,它没有任何问题。但是,它似乎在放置在浏览器中时无法重新绘制。我不知道为什么重新粉刷因为删除菜单栏而破坏,但显然确实如此。
我使用的代码(在init()中):
Frame[] frames = Frame.getFrames();
for (Frame frame : frames){
frame.setMenuBar(null);
frame.pack();
}
此代码确实删除了所需的菜单栏,但每当它被放到网上时也会爆炸。删除此修复了该问题。幸运的是,菜单栏无论如何都不会显示在网上,因此您不会因删除这些代码而损失太多。