Witam.
Podczas pisania mojej aplikacji napotkałem wyjątek NULL POINTER EXCEPTION podczas korzystania z komponentu JTree. Na formularzu mam dwa koponenty JTree i podczas kliknięcia na jeden z nich zawartość drugiego się zmienia. Musiałem zatem usuwać zawartość drugiego drzewa i wczytywać węzły od początku (z innego pliku XML). Jeśli zrobię wszystko intuicyjnie (tzn. ustawiam focus na pierwsze drzewo i zmieniam zaznaczony element) to w drugim wyświetla się wszystko elegancko.
Ale jeśli najpierw zaznaczę element w drugim drzewie (na początku jest tam tylko 1 element - korzeń - zawierający łańcuch String) i potem kliknę na pierwsze drzewo to wyskakuje wyjątek. Zauważyłem, że wystapienie wyjątku powoduje metoda: reload(); wywoływana na rzecz modelu drzewa. Ma ktoś pomysł co to może być?
(cały projekt mam na lapie, więc kod wrzucę w ciągu następnych paru dni)
Całość wygląda mniej więcej tak:
- tworzenie drzew:
- tworzę obiekt DefaultMutableNode będący korzeniem
- tworzę nowy model drzewa w konstruktorze podając w.w. korzeń
- tworzę komponent JTree w konstruktorze podając model z pkt. 2
- obsłua kliknięcia:
- zaimplementowany interfejs z metodą valueChange
- jeśli zdarzenie pochodzi od Drzewa1 to uruchom parser, wczytaj dane i przeładuj Drzewo2
jeśli od Drzewa2 - przetwarzaj elementy zachowane w Drzewie 2
- dzialanie poprawne:
(focus na Drzewo1) -> wybranie elemmentu Drzewa1 -> update Drzewa2 -> wybranie elementu Drzewa2 - > przetwarzanie Drzewa 2 - wystąpienie wyjątku:
(focus na Drzewo2 i zaznaczony jego korzen jako jedyny element) -> wybranie elementu Drzewa1 -> update Drzewa2 (wyjątek)
Update Drzewa 2 polega na wykasowaniu wszystkich dzieci korzenia i wczytanie nowych z pliku XML.
Czy ktoś ma jakiś pomysł? Wygląda to tak, jakby wywoływanie metody RELOAD musiałoby wystąpić jedynei podczas braku zaznaczenie elementu drzewa2.
Może wiecie jak w prosty sposób usunąć zaznaczenie w JTree? To takie "obejście" problemu, ale w ostateczności sie nim zadowolę.
(Sorki za brak kodu, wiem, że to mało profesjonalne, ale serio nie mogę teraz odpalać lapa i przegrywać wszystko na PC'ta. Postaram się to dorzucić rano.)
Pozdrawiam!