Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятный мне nullpointerexception 
V
    Опции темы
Dzo
Дата 29.10.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: 1
Всего: 1



Пишу небольшую сетевую игру. Есть непонятная проблема с клеинтовым GUI - вываливается NullPointerException

Сначала код.

clientGUI:

Код

public class ClientGUI {
    
    Client clientTCP;

    private JPanel createEnterNamePanel() {
        
        enterNamePanel = new JPanel();
        
        enterYourNameTxT = new JTextField("Enter your name:", 20);
        enterTheGameButton = new JButton(new StartClientAction(this));
        enterNamePanel.setSize(250, 60);
        enterNamePanel.setLocation(25, 35);
        //enterNamePanel.setBackground(Color.black);
        enterNamePanel.add(enterYourNameTxT);
        enterNamePanel.add(enterTheGameButton);
        enterTheGameButton.setText("Enter the Game");
        
        return enterNamePanel;
    }

    private JPanel createSendWordPanel() {
        
        JPanel sendWordPanel = new JPanel();
        sendWordPanel.setSize(320, 70);
        sendWordPanel.setLocation(0, 200);
        // sendWordPanel.setBackground(Color.pink);
        sendWordPanel.setBorder(BorderFactory.createTitledBorder("Enter your word here"));
        
        enterWordTxT = new JTextField(18);
        enterWordTxT.setEnabled(false);
        sendWordPanel.add(enterWordTxT);
        
        sendWordButton = new JButton(new SendWordAction(this));
        sendWordButton.setText("Send word");
        sendWordButton.setEnabled(false);
        sendWordPanel.add(sendWordButton);
        
        return sendWordPanel;
        
    }

    public void startTCPClient(final String userName) {
        Runnable r = new Runnable() {
            public void run() {
                try {
                    clientTCP = new Client(userName, ClientGUI.this);
                } catch (IOException e) {
                    System.out.println("ERRROR!");
                    System.out.println(e);
                }
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
    
    public void sendWordToServer() {
        clientTCP.hmm = true;
    }

        public static void main(String args[]) {

        Runnable r = new Runnable() {
            public void run() {
                frame = new JFrame("COMN Assignment 1 - Jan Domozilov - 0789133 - Client");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setPreferredSize(new Dimension(300, 150));
                ClientGUI clientGUI = new ClientGUI();
                frame.add(clientGUI.createEnterNamePanel());
                frame.add(clientGUI.createTMPPanel());
                frame.pack();
                frame.setVisible(true);
            }
        };

        SwingUtilities.invokeLater(r);
    }
}


STartClientAction:

Код

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;


public class StartClientAction extends AbstractAction {
    
    private static final long serialVersionUID = 1L;
    
    private ClientGUI clientGUI;

    public StartClientAction(ClientGUI clientGUI) {
        this.clientGUI = clientGUI;
    }

    public void actionPerformed(ActionEvent e) {
        
        clientGUI.startTCPClient(clientGUI.enterYourNameTxT.getText());
        
    };
}


SendWordAction

Код

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;

public class SendWordAction extends AbstractAction {
    
    private static final long serialVersionUID = 1L;
    
    private ClientGUI clientGUI;
    
    public SendWordAction(ClientGUI clientGUI) {
        this.clientGUI = clientGUI;
    }
    
    public void actionPerformed(ActionEvent e) {
        clientGUI.sendWordToServer();
    };

}


Теперь описание проблемы:

В теории это работает так. Открывается окно (функция main), там в поле вводится, к примеру, имя, наживается кнопка. Кнопка нажимается вот эта

Код

enterTheGameButton = new JButton(new StartClientAction(this)); 


и следовательно вызывается StartClientAction в котором (смотри код) вызывается

Код

clientGUI.startTCPClient(clientGUI.enterYourNameTxT.getText());


которое отлично работает. Потом на этой же форме появляется другая кнопка, а именно sendWordButton = new JButton(new SendWordAction(this)); и по ее нажатию вызывается соответственно SendWordAction и вооот тут...

clientGUI.sendWordToServer(); - выдает NullPointerException, потому что якобы объект clientTCP вот тут:

clientTCP.hmm = true;

не инициализирован.

Так как же он не инициализирован, если кнопочка, вызывающая StartClientAction была нажат уже черт знает когда. Что я упускаю?

Есть подозрение, что проблема в том, что я что-о вызываю из одного Threada, а что-то из другого.

Спасибо!

Это сообщение отредактировал(а) Dzo - 29.10.2009, 15:03
PM MAIL   Вверх
4EJIOBEK
Дата 29.10.2009, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 26.3.2007

Репутация: нет
Всего: 4



непонятно, где вызывается метод startTCPClient в котором инициализируется clientTCP!?

Это сообщение отредактировал(а) 4EJIOBEK - 29.10.2009, 15:26
PM MAIL ICQ   Вверх
Dzo
Дата 29.10.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 22.4.2008

Репутация: 1
Всего: 1



Цитата(4EJIOBEK @ 29.10.2009,  15:25)
непонятно, где вызывается метод startTCPClient в котором инициализируется clientTCP!?

Он вызывается по нажатию кнопочки enterTheGameButton в StartClientAction классе, код которого я выложил.

Это сообщение отредактировал(а) Dzo - 29.10.2009, 15:46
PM MAIL   Вверх
4EJIOBEK
Дата 29.10.2009, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 26.3.2007

Репутация: нет
Всего: 4



поскольку вся картина не видна, есть предположение что проблемы с инициализацией самого сlientTCP(возможно есепшн в конструкторе), могу посоветовать воспользоваться дебаггером чтоб выяснить причину NullPointerException.


PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.