# "Code too large" bei Netbeans



## Scruffy (28. Jul 2011)

Ich hab ein interessantes Problem, bei dem ich nicht unbedingt weiterkomme. 
Ich nutze Netbeans, um ein Testprogramm zu schreiben. In der GUI gibt es jede Menge (ich kann sie nicht zählen, aber grob geschätzt um die 400-500) Komponenten. Sie werden zwar nicht alle auf einmal angezeigt, aber sie sind alle miteinander irgendwie Verknüpft (durch Bindungen). Heißt: wenn ich auf einem Panel etwas ändere, ändert sich auch etwas auf einem anderen. Diese GUI wird im Netbeans-Designer erstellt. Der wiederum packt alle Eigenschaften in die Methode *initComponents()*. Nun ist das Problem, dass ich erst 1/3 der Komponenten erstellt habe und schon meldet der Compiler "Code too large"... Ich weiß (hab die sarkastischen Kommentare in den anderen Posts gelesen): Ausgliedern was geht, aber in diesem Fall geht nicht, denn den Code von Netbeans kann ich nicht ohne weiteres ändern.

Was kann man da tun? Ist das ein Java Problem und "wäre das mit .NET nicht passiert" oder kann man einfach nicht so große Programme schreiben (was ich mir nicht so recht vorstellen kann).


----------



## faetzminator (28. Jul 2011)

Vielleicht liegt das einfach am GUI-Designer? Wieso wird das GUI nicht von Hand geschrieben? Also ich kenn die Fehlermeldung nur von den bööösen, böösen JSPs


----------



## Gast2 (28. Jul 2011)

> Was kann man da tun?


Ausgliedern was geht 
Du wirst nicht all deine Panels oder Komponenten in einem Javafile brauchen.


----------



## Cola_Colin (28. Jul 2011)

Wieviele Zeilen sind das ? 
Was ist das für eine GUI, die auf einmal 400 bis 500 Komponenten anzeigt ?
Das wirst du eben doch ausgliedern müssen. Erstelle eine Reihe von JPanel, auf denen die Komponenten sind, dann geht das.


----------



## Landei (28. Jul 2011)

Es gibt so einige Beschränkungen...

VM Spec The class File Format


----------



## Scruffy (29. Jul 2011)

Es werden ja nicht alle Komponenten auf einmal gezeigt, sie sind in einem CardLayout angeordnet. Sie müssen aber alle bein Start erstellt werden, da sie von einander abhängen.

Die initComponents() hat jetzt um sie 7300 Zeilen. 

Wie könnte ich ausgliedern? Gestern hab ich Netbeans geschlossen, da wollte er das Programm nicht kompilieren. Heute morgen will er einige Komponenten nicht öffnen...


----------



## Landei (29. Jul 2011)

Eine vertrackte Situation, und in diesem Fall ist Fernhilfe wirklich schwierig. Vielleicht können dir die Jungs und Mädels beim NetBeans-Forum bezüglich des GUI-Designers weiterhelfen?


----------



## Gast2 (29. Jul 2011)

Du kannst doch alles auf einmal erstellen aber es muss doch nicht alles in einer Klasse sein: 

Beispiel: 

Eine Toolbar. Man kann alle Buttons in die Toolbar Klasse packen ODER man macht Sub Toolbars. Diese werden dann in die Haupt Toolbar reingepackt. Genauso gehnts auch sonst wo. 

Bei deinem CardLayout Beispielsweise: Mach eine Klasse für das CardLayout mit den Basiskomponenten. Mach ein Interface für die Cards und dann für jede Card eine eigene Klasse. 

Musst du über Karten hinweg Dinge per Binding verbinden schaffe ein Model für das HauptCard in dem die entsprechenden Attribute vorhanden sind und binde deine Cards auf dieses Model ect.

Du musst auch deine GUI in sub Komponenten splitten. 

Ich habe z.B. eine Terminal Klasse. Die wird ins Programm als Terminal eingefügt. Welche Implementierung dahinter steckt ist ja dem Hauptframe sche... egal. Ich könnte meine Terminal Impl. einfach tauschen, da der MainFrame nur das Interface einbindet. 

Auf die Art und Weise hat man keine Monster Dateien. Auch mit dem GUI Designer sollte man sich geeignete GUI Komponenten separat erstellen.

Nachtrag: Genau aus solchen Gründen mag ich GUI Designer nicht. Wenn man Übung hat geht das irgendwann per Hand genauso schnell. Und man versteht wenigstens alle Elemente die man verwendet. Hab am Anfang auch Designer verwendet und es hat immer gehakt. Seit ich alles selber programmiere läufts auch prima. Ist halt erst mal aufwendiger, da man sich schon sehr mit den Layout Managern ect. beschäftigen muss. Lohnt sich aber imho sehr!


----------



## maki (29. Jul 2011)

> In der GUI gibt es jede Menge (ich kann sie nicht zählen, aber grob geschätzt um die 400-500) Komponenten.


400-500 Komponenten in einer View?
Dann liegt der Fehler weder an Java noch an Netbeans, und schon gar nicht am GUI Designer.
Aufspalten, auslagern, strukturieren, redundanzen vermeiden...


----------



## Scruffy (29. Jul 2011)

@kappesf: Dein Anstoß gefällt mir. Hab nur noch nicht verstanden, wie ich das Binding machen soll. Und bin mir nicht sicher, ob ich das was ich da tue auch mit einem Desinger hinbekommen kann. Kann ich JPanel "Formule" erstellen und diese dann dafür nutzen?

Ich will hier jetzt keine Grundsatzdiskussion vom Zaun brechen, deswegen nur kurz: Wenn es schon einen Designer gibt, möchte ich ihn auch nutzen, so bequem bin ich dann doch. Ich versuch auch keinen der ihn nicht nutzt dazu zu bekehren. Ich mag das. Soll jetzt aber nicht heißen, dass ich mich mit den Layoutmanagern oder anderen Dingen weniger auskenne.


----------



## Gast2 (29. Jul 2011)

Scruffy hat gesagt.:


> @kappesf: Dein Anstoß gefällt mir. Hab nur noch nicht verstanden, wie ich das Binding machen soll. Und bin mir nicht sicher, ob ich das was ich da tue auch mit einem Desinger hinbekommen kann. Kann ich JPanel "Formule" erstellen und diese dann dafür nutzen?
> 
> Ich will hier jetzt keine Grundsatzdiskussion vom Zaun brechen, deswegen nur kurz: Wenn es schon einen Designer gibt, möchte ich ihn auch nutzen, so bequem bin ich dann doch. Ich versuch auch keinen der ihn nicht nutzt dazu zu bekehren. Ich mag das. Soll jetzt aber nicht heißen, dass ich mich mit den Layoutmanagern oder anderen Dingen weniger auskenne.



Dazu kann ich nur eins sagen. Wenn man 400 - 500 Elemente in eine View packt hat man GUI Design nicht im geringsten verstanden ohne das jetzt böse zu meinen. 

Fakt ist aber, dass man gerade dann von GUI Designern die Finger lassen sollte! Bevor man einen Designer benutzt muss man exakt verstehen was der so macht und wie er das macht. 

Man sollte in jedem Fall händisch eine GUI programmieren können. 

Wenn man das dann kann möchte man oft gar nicht mehr mit Designern arbeiten, da der Code schlechter ist und auch schwer wartbar. Schneller ist man dann meist eh nicht mehr.


----------



## Scruffy (29. Jul 2011)

kappesf hat gesagt.:


> ... ohne das jetzt böse zu meinen.


Ne, gar nicht.

Klar, weiß ich wie das alles funktioniert, ich bin kein Anfänger. Und es ist mir auch klar, dass es viele Wege gibt. Der Weg den ich jetzt eingeschlagen habe, führt zu nichts deswegen frag ich ja. Wäre nett gewesen eine Antwort zu bekommen anstatt hier angemacht zu werden. Es ist generell in Mode Leute mit Problemen erstmal auszulachen, weil das alles ja so einfach ist. Nicht nur hier, auch in anderen Foren. Wenn es einfach wäre, würde hier keiner Fragen stellen. Und ich finde nicht, dass meine Frage so trivial ist.

Ich kann eine GUI "händisch" programmieren, nur sehe ich da keinen Sinn drin. Das ist meine Sicht der Dinge und ich versuche keinen vom Gegenteil zu Überzeugen. Wenn man mir nicht helfen kann/will, einfach nicht antworten. Aber anmachen lassen muss ich mich hier deswegen nicht.

Ohne das alles jetzt böse zu meinen.


----------



## faetzminator (29. Jul 2011)

Scruffy hat gesagt.:


> Ich kann eine GUI "händisch" programmieren, nur sehe ich da keinen Sinn drin.



Wenn der Error sich aber durch das händische Schreiben (und schön Verteilen) des Codes löst, macht dann die händische Variante immer noch keinen Sinn?


----------



## Scruffy (29. Jul 2011)

Dann kann es auch im Designer gelöst werden. Oder zumindest sollte es das...

Edit: Ich will nicht darüber diskutieren, ob Desinger oder nicht. Ich würde gern das Problem lösen. Der Ansatz eben hat mir gefallen.


----------



## faetzminator (29. Jul 2011)

Es ist mir wirklich egal, ob du den Designer verwendest oder nicht. Ebenfalls ist mir egal, was die anderen davon halten und ob ihr euch streitet. Es geht mir hier gar nicht um eine Diskussion, ob GUI-Designer oder nicht.
Du wolltest von uns eine Lösung. Und die einfachste, welche mir einfällt, ist: es von Hand machen. Anscheinend kann dir hier niemand sagen, wie man dieses Problem *mit* dem Designer lösen kann. Ich würde also eher eine Antwort wie 





> Das ist schade, ich würde es gerne mit dem Designer machen. Hat jemand noch eine andere Idee? Wenn nicht, muss ich es Wohl oder Übel redesignen und/oder von Hand programmieren.


 erwarten.


----------



## Scruffy (29. Jul 2011)

Ich hab ja gesagt, dass ich den Ansatz von kappesf ganz gut fand und das jetzt auch probiere, nur wie das Binding gehen soll hab ich nicht verstanden.


----------



## Gast2 (29. Jul 2011)

Scruffy hat gesagt.:


> Ich hab ja gesagt, dass ich den Ansatz von kappesf ganz gut fand und das jetzt auch probiere, nur wie das Binding gehen soll hab ich nicht verstanden.



- Nemhen wir an du hast einen View Container. 

- Der nimmt beliebig viele Views auf. 

- Die Views kennen sich gegenseitig nicht

- Mehrere Views stellen gleiche Daten dar. 

==> Erstelle ein Model welches dem View Container gehört. Dieser übergibt das Model an jede View welche in den Container hinzugefügt wird. 
==> View synchronisiert sich ber Binding an das Model. 

Im Prinzip ist es egal wo so ein Model liegt es muss nur an jede View bekannt gemacht werden. Den Rest erledigt dann das Binding Framework.

PS: Dich lacht keiner aus. Und wenn niemand helfen wollte gäbs ja keine Posts


----------

