Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 1
Регистрация: 24.11.2010
Сообщений: 3

JTree: NullPointerException при удалении узлов

04.02.2011, 16:55. Показов 1138. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Возникла следующая проблема. Имеется приложение, использующее JTree, в котором отображается некая иерархия. При удалении узлов дерева (у модели дерева вызывается removeNodeFromParent) вылетает следующая ошибка:
Кликните здесь для просмотра всего текста
java.lang.NullPointerException at javax.swing.plaf.basic.BasicTreeUI.compl eteEditing(BasicTreeUI.java:1855) at javax.swing.plaf.basic.BasicTreeUI.compl eteEditing(BasicTreeUI.java:1820) at javax.swing.plaf.basic.BasicTreeUI$TreeS electionHandler.valueChanged(BasicTreeUI .java:2418) at javax.swing.tree.DefaultTreeSelectionMod el.fireValueChanged(DefaultTreeSelection Model.java:612) at javax.swing.tree.DefaultTreeSelectionMod el.notifyPathChange(DefaultTreeSelection Model.java:1006) at javax.swing.tree.DefaultTreeSelectionMod el.removeSelectionPaths(DefaultTreeSelec tionModel.java:498) at javax.swing.JTree.removeDescendantSelect edPaths(JTree.java:2879) at javax.swing.JTree.removeDescendantSelect edPaths(JTree.java:2929) at javax.swing.JTree$TreeModelHandler.treeN odesRemoved(JTree.java:3012) at javax.swing.tree.DefaultTreeModel.fireTr eeNodesRemoved(DefaultTreeModel.java:492 ) at javax.swing.tree.DefaultTreeModel.nodesW ereRemoved(DefaultTreeModel.java:303) at javax.swing.tree.DefaultTreeModel.remove NodeFromParent(DefaultTreeModel.java:239 )


(строки стека, заканчивая вызовом removeNodeFromParent, опущены, поскольку не содержат никакой информации к размышлению).
У этой ошибки есть две интересных особенности:
1) где-то в 1 из 50 случаев ее не происходит;
2) она происходит, если на дереве висит свой собственный (т.е. не default'ный) TreeCellEditor; в противном случае - все нормально.
Исследование стека отладчиком показало, что этот NullPointerException происходит из-за того, что методе getNodeForPath класса VariableHeightLayoutCache (extends AbstractLayoutCache) помеченное моим комментарием (на кириллице ) условие возращает true, и метод возвращает null:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
    private TreeStateNode getNodeForPath(TreePath path,boolean onlyIfVisible,boolean shouldCreate) {
    if(path != null) {
        TreeStateNode      node;
        node = getMapping(path);
        if(node != null) {
        if(onlyIfVisible && !node.isVisible())
            return null;
        return node;
        }
        // Check all the parent paths, until a match is found.
        Stack                paths;
        if(tempStacks.size() == 0) {
        paths = new Stack();
        }
        else {
        paths = (Stack)tempStacks.pop();
        }
        try {
        paths.push(path);
        path = path.getParentPath();
        node = null;
        while(path != null) {
            node = getMapping(path);
            if(node != null) {
            // Found a match, create entries for all paths in
            // paths.
            while(node != null && paths.size() > 0) {
                path = (TreePath)paths.pop();
                node.getLoadedChildren(shouldCreate);
 
                int            childIndex = treeModel.
                      getIndexOfChild(node.getUserObject(),
                          path.getLastPathComponent());
 
                // Это условие возвращает true
 
                if(childIndex == -1 ||
                   childIndex >= node.getChildCount() ||
                   (onlyIfVisible && !node.isVisible())) {
                node = null;
                }
                else
                node = (TreeStateNode)node.getChildAt
                               (childIndex);
            }
            return node;
            }
            paths.push(path);
            path = path.getParentPath();
        }
        }
        finally {
        paths.removeAllElements();
        tempStacks.push(paths);
        }
        // If we get here it means they share a different root!
        // We could throw an exception...
    }
    return null;
    }
К сожалению, при отладке этого кода я не смог просмотреть значения локальных переме
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2011, 16:55
Ответы с готовыми решениями:

NullPointerException при добавлении объекта в ArrayList
Здравствуйте! Проблема в том, что при добавлении объекта в список ArrayList, моя программа выдаёт java.lang.NullPointerException. Код...

NullPointerException при запуске приложения
Всем привет! Написала класс по такому заданию : Разработайте класс для хранения паспортных данных человека. Предусмотрите операции...

NullPointerException при замещении метода fireActionPerformed
private void addRadioButton(String s,ActionListener listener) { JRadioButton button = new JRadioButton(s,false) ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.02.2011, 16:55
Помогаю со студенческими работами здесь

NullPointerException при создании нового потока
Привет всем! Пытаюсь создать новый поток: создаю экземпляр класса, который реализует интерфейс Runnable. Пытаюсь создать экземпляр...

Ошибка при тесте java.lang.nullpointerexception
Не могу никак понять в чем проблема, подскажите пожалуйста, вот код : import java.util.ArrayList; import java.util.TreeSet; /**...

При создании нового объекта класса NullPointerException
Добрый день. Есть два класса // содержит индексы для таблицы public class Slot { private int _row; private int...

[Hibernate] при запуске вылетает NullPointerException
Простейший код , просто создаю SessionFactory , при запуске вылетает NullPointerException. Сам код: public class Main { public...

Jtree удаление узлов
Здравствуйте товарищи. Столкнулся с проблемой. При создании дерева создаются лишние узлы. Можно сократить это? Убрать папки под...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru