Почему в этом коде появляется ошибка «Невозможно создать компонент»? - PullRequest
3 голосов
/ 26 марта 2010

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

java.lang.AssertionError: Component cannot be created for {component=null, displayName=Exploirer, instanceCreate=AlwaysEnabledAction[Exploirer]}
    at org.openide.windows.OpenComponentAction.getTopComponent(OpenComponentAction.java:71)

Почему? А как добавить туда узел? Смотрите код.

private ProjectsChildren projectsChildren;
private final ExplorerManager mgr = new ExplorerManager();
private ProjectNode projectNode = new ProjectNode(new MainProject("ggg"), projectsChildren);

public ExploirerTopComponent() {
    //*****************This is not important code for my problem
    initComponents();
    setName(NbBundle.getMessage(ExploirerTopComponent.class, "CTL_ExploirerTopComponent"));
    setToolTipText(NbBundle.getMessage(ExploirerTopComponent.class, "HINT_ExploirerTopComponent"));
    //        setIcon(ImageUtilities.loadImage(ICON_PATH, true));
    //map.put("delete", ExplorerUtils.actionDelete(mgr, true));
    //*******************end of not important code


    associateLookup (ExplorerUtils.createLookup(mgr, getActionMap()));


   /* somewhere here is the problem*/
   mgr.setRootContext(projectNode);
   ProjectNode[] pr = null;
   pr[0] = projectNode;
   mgr.getRootContext().getChildren().add(pr);
  }

Ответы [ 3 ]

0 голосов
/ 26 марта 2010

По крайней мере, у вас есть проблема здесь:

ProjectNode[] pr = null;
pr[0] = projectNode;

Это вызовет исключение NullPointerException во второй строке ...

Первая строка должна выглядеть примерно так:

 ProjectNode[] pr = new ProjectNode[5]; // size is 5
0 голосов
/ 26 марта 2010

На самом деле ваш код должен дать вам NullPointerException, потому что здесь:

ProjectNode[] pr = null;
pr[0] = projectNode;

сначала вы устанавливаете массив на нуль, а затем пытаетесь получить доступ к 0-му элементу, поэтому установите его на projectNode.

0 голосов
/ 26 марта 2010
   ProjectNode[] pr = null;
   pr[0] = projectNode;

Возможно, это проблема здесь? У вас есть указатель массива, который указывает на ноль, а затем вы пытаетесь назначить первый объект ProjectNode для несуществующего массива.

Например, при создании массива с помощью ProjectNode[] pr = new ProjectNode[10]; создается пустой массив длиной 10. Сделайте это вместо присвоения ему значения null.

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