2010-11-03 4 views
3

У меня есть два класса gameWindow и gameEngine. Основной метод находится в gameWindow класс &, так что это код поворота GUI. Теперь я хочу получить доступ к компонентам swing в gameEngine. Как это сделать? Я всегда получаю ошибку cannot find symbol, когда я стараюсь это нормально. Я попытался сделать компоненты общедоступными, но не повезло.Доступ к компонентам Swing другого класса

Кроме того, я попытался создать экземпляр gameWindow, но он тоже не помог. Он скомпилирован без каких-либо ошибок, но у меня возникла ошибка BIG во время выполнения (чего я даже не вижу, командная строка прокручивается до предела).

RELP !!

P.S .: Я не думаю, что размещение кода здесь поможет.

+0

Можете ли вы показать нам часть кода, в которой вы создаете экземпляр GameWindow? –

ответ

2

Для доступа к компонентам gameWindow в игреEngine вам нужна ссылка на него. Поэтому я предполагаю, что класс 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 не имеет доступа к компонентам Swing GameWindow.

+0

Теперь я займусь прохождением ссылок. Кроме того, я намеренно разработал его так, чтобы увидеть, работает ли это и что-то новое. Хотя я не знал, что это плохой дизайн, но, поскольку вы предположили, что я пойду для наблюдателя. Благодарю. – MoonStruckHorrors

1

Передайте ссылку на gameEngine в contructor или используйте метод типа getter/setter.

Например, в gameWindow, когда вы создаете класс gameEngine, создайте конструктор, который принимает переменную gameWindow.

gameEngine:


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

1

ответ Винсент правильно, но включает в себя инстанцировании GameWindow, которые после указанной выдает ошибку. Я бы посоветовал перенаправить трассировку стека ошибок на файл, прочитать его и устранить ошибку выполнения во время выполнения, а затем выполнить его инструкции.

+0

Я ничего не знал о передаче ссылок, поэтому я просто создал экземпляр класса 'gameWindow'' gameWindow instance1 = new gameWindow(); '. – MoonStruckHorrors

Смежные вопросы