2011-03-27 96 views
0

我在業餘時間用Java編寫了一個遊戲原型類型。這場比賽只是爲了我的教育目的。我可以通過Web上的JNLP啓動文件以及我的主機上的JFrame正常工作。JApplet不會在瀏覽器中啓動JComponent,在Eclipse中工作

我的主要目的是通過使用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 
    } 
} 

現在,遊戲類本身擴展JComponent的,並實現Runnable,KeyListener的,和的FocusListener。如果我通過Eclipse啓動AppletPlayer,它就像Applet Viewer中的魅力一樣。然而,當我部署到Web我看到兩件事情:

  1. 在Windows XP計算機的小程序加載,撐卡主標題屏幕上,從來沒有獲得焦點,因此從來沒有註冊任何類型的用戶輸入。
  2. 在Applet加載的Windows 7計算機上,我聽到我遊戲的音樂,但Applet屏幕本身渲染一個普通的白色盒子,沒有其他東西。

這些問題都發生在IE和Firefox中。

我一直在細讀Google和StackOverFlow一段時間,試圖挖掘一個解決方案,但沒有任何運氣。我對Applets有點不熟悉,並且希望能夠朝正確的方向發展。

+0

看看Java控制檯 - 它可能會提供一些有用的輸出。 – 2011-03-27 15:40:16

回答

1

一兩件事,可能是這個原因:Swing不是線程安全的,所以在GUI上的所有變化(與包括您setContentPane)應該發生在AWT事件調度線程。此線程上不調用小程序的start()方法。

總結所有GUI相關方法的調用EventQueue.invokeLater(...)調用(或invokeAndWait,如果你需要一些成果,SwingUtilities也有這些方法,如果你喜歡),如果你看到一些變化的樣子。

+0

我決定整齊地將鏈接頁面綁定到我的JNLP文件。然而,你的回答是非常感謝,並導致我研究和學習了很多關於調度程序線程。 – 2011-03-29 00:53:37

相關問題