«Компонент не может быть создан» в Netbeans 7.0.1 - PullRequest
1 голос
/ 03 сентября 2011

РЕДАКТИРОВАТЬ: Извините, я только начал программировать на Java.Оказалось, что это проблема с доступом к массиву вне диапазона ... Я привык к сообщениям об ошибках, связанных с этим автоматом ...

(с использованием Netbeans 7.0.1)

Я настраивал JTextArea и JTable.Я делаю это, добавляя новый класс Java в мой проект, а затем объявляя, что он расширяет конкретный класс, который я хочу (в моем случае, либо JTextArea, либо JTable).

Я использовал его как обычно, добавляя эти новые классы в JDialogs и JInternalFrames без каких-либо проблем.Я делаю это, просто перетаскивая его в мой JDialog или JInternalFrame ...

Но недавно по какой-то причине я начал получать это сообщение об ошибке «Не удается создать экземпляр компонента. Пожалуйста, убедитесь, что это компонент JavaBeans».

JInternalFrames, которые принимали старые настроенные классы, все еще принимают их.Но если я пытаюсь добавить новый настроенный класс, он выдает мне это сообщение об ошибке, а после этого он начинает показывать то же сообщение и старым настроенным классам ...

Происходит что-то действительно странное.Я скопировал тот же код (ранее) настроенного класса в новый класс (конечно, изменив имя класса).Затем я пытаюсь добавить это в мой JInternalFrame.Это дает мне сообщение об ошибке!Если до этого я пытаюсь добавить тот же настроенный класс (с исходным именем), он обычно добавляет класс ....

Это раздражает, и я не могу решить это.Кто-нибудь может мне помочь?

Ответы [ 3 ]

1 голос
/ 22 октября 2012

Большое спасибо за этот ответ, но, если вы хотите узнать причину, вы здесь.

Обычно это появляется в двух положениях:

  1. переопределенный метод в вашем компоненте.
  2. нормальный метод для вашего компонента.

Например:

package UI.Components;

public class LabelComponent extends javax.swing.JLabel {

    private javax.swing.JLabel label;

    public TextFieldComponent() {
        label = new javax.swing.JLabel(_label);
        add(label);
    }

    @Override
    public void setText(String text) {
        label.setText(text);
    }
}

Метод setText(String text) вызывается скажем в конструкторе класса ужинания, затем онпереопределенный новый метод будет вызван в случае, когда переменная (label), которая используется в этом методе, еще не инициализирована, поэтому java.lang.NullPointerException будет обработан.

решение:

1) try ... catch:

@Override
public void setText(String text) {
    try {
        label.setText(text);
    } catch (Exception e) {
    }
}

2) check:

использовать нулевую инициализацию при объявлении

private javax.swing.JLabel label = null;

, затем проверить метод

@Override
public void setText(String text) {
    if(label != null)
        label.setText(text);
}

3) использовать инициализацию при объявлении:

private javax.swing.JLabel label = label = new javax.swing.JLabel();

, а затем использовать метод setText в вашем конструкторе

label.setText(_label);

note:

inВ случае причины (2) это обычный метод для вашего компонента, он такой же, как (1), но вы можете вызвать метод перед инициализациейПеременная или присвойте ей значение null перед вызовом метода и т. д., и ее можно решить теми же способами.

0 голосов
/ 02 февраля 2014

Я сталкивался с подобной проблемой, однако в другом контексте.

У меня есть два отдельных проекта: пользовательский интерфейс, построенный в режиме свинга, и еще один, представляющий собой библиотеку классов.

Я добавил класс в библиотеку классов, направился к пользовательскому интерфейсу и внедрил этот недавно добавленный класс из библиотеки в проект интерфейса Swing в форме существующего пользовательского JFrame.Итак, что случилось со мной сейчас, когда загрузчик классов, конечно, не смог найти класс, потому что проект библиотеки требовал компиляции.Проблема была исправлена ​​путем компиляции.

0 голосов
/ 15 октября 2011

Я тоже столкнулся с той же проблемой, после некоторого поиска в сети я нашел решение этой проблемы. У меня нет глубокого понимания того, почему и как возникает эта проблема, но я могу поделиться с вами найденным решением.

Когда вы получаете сообщение об ошибке, перейдите в меню View -> IDE Log или вы можете открыть журнал из windows_user_Home \ .netbeans \ 7.0 \ var \ log

В этом журнале вы должны найти сообщение об ошибке, которое вы получили, например,

INFO [org.netbeans.modules.form.BeanSupport]: Cannot create default instance of: test.Application1
java.lang.NullPointerException
    at test.Application1.initLabel(Application1.java:906)

Итак, проблема в строке 906 вашего файла .java. Откройте этот файл и прокомментируйте эти строки, и тогда вы сможете преодолеть проблему.

Вы можете добавить компонент в форму или jInternalFrame или ...

После добавления компонента вы можете снова раскомментировать эти строки. Просто очистите и постройте свой проект.

Надеюсь, это поможет ..

Гудлак

reachSDK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...