我在业余时间用Java编写了一个游戏原型。这场比赛仅仅是出于我的教育目的。我通过网络上的JNLP启动文件以及我的主机上的JFrame工作正常。
我的主要目的是通过使用JApplet使这个原型可以在网络浏览器中播放。我编写了一个名为AppletPlayer.java的类。本课程的目的本质上是作为我的游戏主类的发射器。 AppletPlayer.java文件大致如下:
public class AppletPlayer extends JApplet {
private Game myGame_; // This is my game's main class
private boolean started_ = false;
public void init() {}
public void start() {
if (!started_) {
started_ = true;
myGame_ = new Game();
this.setContentPane(myGame_);
myGame_.start() // I set focusable, and enabled to 'true' in the Game's start method
// My Game class has no init method. Just a start method that spawns a new thread, that the game runs in
}
}
现在,Game类本身扩展了JComponent,并实现了Runnable,KeyListener和FocusListener。如果我通过Eclipse启动AppletPlayer,它就像Applet Viewer中的魅力一样。但是,当我部署到网络时,我看到两件事:
IE和Firefox都会出现这些问题。
我一直在浏览谷歌和StackOverFlow一段时间,试图挖掘解决方案,但没有运气。我对Applets有点不熟悉,并且希望能够朝着正确的方向努力。
答案 0 :(得分:1)
可能是一个原因:Swing不是线程安全的,因此GUI上的所有更改(包括您的setContentPane
)都应该出现在AWT事件派发线程中。在这个帖子上没有调用applet的start()
方法。
在EventQueue.invokeLater(...)
电话中打包所有与GUI相关的方法调用(或invokeAndWait
,如果您需要一些结果,SwingUtilities
也有这些方法,如果您愿意的话)并查看如果你看到一些变化。