2010-11-03 78 views
3

我有兩個類gameWindowgameEngine。 Main方法在gameWindow類&所以是swing GUI代碼。現在,我想訪問gameEngine中的擺動組件。怎麼做?當我正常嘗試時,我總是得到cannot find symbol錯誤。我試過讓組件公開,但沒有運氣。訪問另一個類的Swing組件

此外,我試圖創建一個gameWindow的實例,但它也沒有幫助。它編譯沒有任何錯誤,但我得到了一個大運行時錯誤(我什至不能看到,命令提示符滾動到它的限制)。

RELP !!

P.S .:我不認爲在這裏發佈代碼將有所幫助。

+0

你能告訴我們你實例化GameWindow的部分代碼嗎? – 2010-11-03 17:11:36

回答

2

爲了在gameEngine中訪問gameWindow的組件,您需要引用它。所以我假設GameWindow類創建了GameEngine的實例。然後,你可以做這樣的事情:

public class GameEngine{ 
     GameWindow window; 

     public GameEngine(GameWindow gm){ 
      window = gm; 
     } 
     //rest of your code 
} 

public class GameWindow(){ 

    //At the point where you create the GameEngine 
    GameEngine ge = new GameEngine(this); 
    //rest of your code 


} 

現在GameEngine具有對GameWindow,它可以使用一個參考。

話雖如此,我會建議你考慮一個不同的設計。讓GameEngine直接訪問GameWindow聽起來好像錯誤的類負責錯誤的事情。也許你可以嘗試使用某種Observer,以便GameWindow在GameEngine中查找更改,然後訪問更新並相應地修改視圖。所以GameEngine不必訪問GameWindow的swing組件。

+0

我會仔細研究傳遞參考。此外,我故意這樣設計它,看看這是否有效並學到了新的東西。雖然我不知道這是一個糟糕的設計,但既然你已經建議我會去觀察。謝謝。 – MoonStruckHorrors 2010-11-03 18:07:10

1

在構造器中傳遞對gameEngine的引用或使用getter/setter類型方法。

例如,在gameWindow中,當您創建gameEngine類時,有一個構造函數需要一個gameWindow變量。

gameEngine:


gameWindow theMainWindow = null; public gameEngine(gameWindow mainWindow) { theMainWindow = mainWindow; }

1

文森特的答案是正確的,但涉及實例GameWindow其博文中表示給出了一個錯誤。我建議將錯誤堆棧跟蹤重定向到一個文件,讀取它並排除運行時錯誤,然後按照他的指示進行操作。

+0

我對傳遞引用一無所知,所以我通過'gameWindow instance1 = new gameWindow();'實例化了'gameWindow'類。 – MoonStruckHorrors 2010-11-03 17:57:45