2010-11-03 76 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