NetBeans. "Code too large..."

0

Witam, mam kolejny problem z programem pisanym w NetBeans.
Robię aplikację do bazy danych - jest tam masa różnych jTextField, jPanel, jLabel do wprowadzania danych wrzucanych później do bazy (Postgres).
Program w którymś momencie zgłosił błąd: "Code too large in initComponents()". Czyżby było za dużo użytych komponentów? To jest w ogóle możliwe? NetBeans przecież sam automatycznie wszystkie nowe komponenty deklaruje w initComponents() i chyba nie bardzo mam na to wpływ..?
Bardzo proszę o pomoc, totalnie nie wiem co teraz z tym zrobić... :(

0

To chyba nie NetBeans zgłaszał, a konkretnie kompilator. Pliki .class mają pewne ograniczenia, sporo indeksów czy liczników wewnątrz takich plików ma rozmiar 16-bit. Dokładnie nie pamiętam jaka jest budowa pliku .class, ale może właśnie przekroczyłeś jakiś limit 65k instrukcji (bajtkodowych) na metodę.

Zapewne stosujesz dużo kopiuj wkleja. Kontrolki możesz generować dynamicznie, tzn stwórz sobie np listę kontrolek i forem je generuj.

Napisz jak długi masz ten kod i ile kontrolek na formie.

1

Dokładnie to co pisze Wibowit. Wielkość pojedynczej metody jest ograniczona do 64kb bytecodu, przy czym statyczne inicjalizatory są traktowane "jako jedna metoda". Visual z NB wyprodukował ci za dużą metodę initComponents, bo jest dość "mało mądry" (jak każdy visual). Musisz podzielić tą metodę na mniejsze.

Moja rada. W NB wejdź w edycję źródła do metody initComopnents(). Zaznacz jakiś fragment dotyczący inicjalizacji konkretnego komponentu (lub grupy) i następnie z menu Refactor wybierz Introduce Method. Nazwij nową metodę tak byś wiedział co się dzieje np initMyComponent.
W ten sposób postąp z każdym z komponentów. Metoda initComponents będzie wtedy tylko wywoływać kolejne małe metody inicjujące i problem zniknie.

0

Jeju, dziękuję za odpowiedzi. Mam niestety problem z Introduce Method. Wchodzę normalnie na panel z "Source", zaznaczam dla sprawdzenia 1 linię kodu w initComponents() (np. jPanel1 = new javax.swing.JPanel();) bądź kilka linii z rzędu (nie potrafię zaznaczyć wybiórczo np. wszystkiego co dotyczy jButton3, nie wiem jak zaznaczać poszczególne linie, Ctlr tu nie działa) i w Refactor wybieram Introduce Method, podaję jakąś nazwę i nic. Totalnie nic się nie dzieje. Co robię źle..?

0

Kod zaznaczasz jak zwykły tekst. Chyba, że NB blokuje edycję tej metody... i dal tego lubię visuale.

0

A może da się podzielić formę na małe panele? Co ty tam w ogóle masz? 500 JLabeli pod rząd? Takie coś można wygenerować w pętli przecież.

0

Jest sporo tego wszystkiego (jTextField i JLabel głównie). Jak to generować w pętli? W NetBeans korzystam z Design i wrzucam komponenty w program wklejając je z Palette i program sam to tworzy w initComponents(). Nie potrafię odblokować tej metody żeby cokolwiek tam ręcznie zrobić.

0

Ale to initComponents to jest chyba wywoływane z innej metody. Dopisz sobie własną metodę generującą kontrolki w pętli i wywołaj ją tuż obok wywołania initComponents().

Wrzuć zrzut ekranu z designera. Może twoje kontrolki nadają się do tego, aby je wepchnąć do tabeli?

0

Hm, kombinowanie teraz z tabelą to tak średnio widzę, mam to porozmieszczane w jPanelach z odpowiednimi Layoutami (tak się już przyzwyczaiłam do robienia, chwilowo za mało czasu na zabawę z tabelami, z których btw jeszcze niespecjalnie korzystałam).

Czyli po prostu mam stworzyć np. jakieś init() w którym potworzę sobie np same jTextField, i kolejny init() z samymi jLabel, ustawię od razu wszystkie parametry tych kontrolek w tych initach i wrzucę do Form żeby wywoływało to jako nowe metody? :) =ręcznie trzeba sobie potworzyć potrzebne komponenty? :)

A co jeszcze w przypadku kiedy już utworzę sobie np. jakieś jLabel i je wyświetlę i będę chciała zmienić jakieś jego parametry, np. nazwę czy cokolwiek innego, z poziomu "Design" - to będzie się automatycznie zapisywało w init() zawierającym deklarację tego jLabela?

Ps. Takie szybkie i banalne pewno pytanie - czy w tabelach można ustawiać komórkom odpowiedni border i blokować tekst żeby się nie dało go edytować? Bo jeśli tak to to w sumie może być lepsze niż męczenie się z panelami i wciskaniem do nich pól tekstowych i labeli...

0

ZTCP w tabeli możesz mieć wszystko o ile podmienisz renderer. http://download.oracle.com/ja[...]uiswing/components/table.html

Mimo wszystko czuję, że masz skopany design. Trzeba nawciskać naprawdę dużo kontrolek, żeby się w 64k bytecodu nie zmieścić. Stawiam, że masz ich tam rzędu tysiąca kontrolek.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0