Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 13:11   #1
AJlxuMuk
 
Регистрация: 08.10.2009
Сообщений: 8
По умолчанию this - параметр метода, который вызывается в конструкторе

Здравствуйте. Имеется следующий код:

Код:
import javax.swing.*;
import java.awt.*;
 
class EditorTabbedPane extends JTabbedPane
{
 
        EditorTabbedPane()
        {
                setConstraints();
                parentPanel = (MainPanel)getParent();
                parentPanel.add(this, constraints);
                JTextArea area = new JTextArea();
                addTab("dfgfd",  area );
        }
        
        private void setConstraints()
        {
                parentPanel = (MainPanel)getParent();
                
                constraints = new GridBagConstraints();
                constraints.weightx = 1;
                constraints.weighty = 1;
                constraints.gridx = 0;
                constraints.gridy = 0;
                constraints.fill = GridBagConstraints.BOTH;
                constraints.insets = new Insets(1, 1, 1, 1);
        }
        
        GridBagConstraints constraints;
        MainPanel  parentPanel;
}
Я понимаю, что, возможно, это тяжело назвать хорошим стилем программирования, но мне нужен совет с чисто технической точки зрения. Код писался исключительно в целях обучения, чтоб понять где можно применять this.
parentPanel - ссылка на родительский контейнер (в данном случае это панель)
constraints - ограничения, которые устанавливаются для объекта этого класса в layout, который, в свою очередь, лежит в объекте parentPanel

Прошу обратить внимание на код конструктора. В первой строке происходит инициализация constraints. Далее получаем ссылку на родительский контейнер. После чего нечеловеческим образом (=)) пытаемся добавить объект этого класса (EditorTabbedPane) в parentPanel, используя ссылку на себя самого (this). Код компилируется, но при попытке выполнения в строке

parentPanel.add(this, constraints);

выбрасывается

Exception in thread "main" java.lang.NullPointerException
at EditorTabbedPane.<init>(EditorTabbe dPane.java:11)

Вопрос: можно ли поступать вышеприведенным образом? У меня есть подозрения, что, возможно, на момент передачи методу parentPanel.add this еще не инициализирован. Или ошибка в чем-то другом?
AJlxuMuk вне форума Ответить с цитированием
Старый 08.02.2012, 18:53   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас ParentPanel это Null.
так как у вас еще нет родителя.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.02.2012, 19:19   #3
_Денис
Пользователь
 
Аватар для _Денис
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию

Вот тебе пример.
Такой код генерирует Eclipse
this используется для обращения к членам класса,
так как в методы и конструктор передаются параметры,
имена которых совпадают с именами членов класса
Код:
public class Book {
	private String title;
	private double price;

	public Book(String title, double price) {
		this.title = title;
		this.price = price;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}
}
Я бы изменил мир, но исходников нету
_Денис вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в конструкторе C++ Ver0nica Помощь студентам 1 24.04.2011 13:34
Конструктор в конструкторе Юра_YUYU Общие вопросы C/C++ 3 30.01.2010 15:32
Инициализация массивов в конструкторе. jojahti Общие вопросы C/C++ 7 27.07.2009 13:30
запрос который бы подсчитывал количество полных лет начиная с того года который указан в данных мне базах PereCCC Помощь студентам 8 15.05.2008 16:24