"Code too large" bei Netbeans

Scruffy

Mitglied
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).
 
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 😀
 
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.
 
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...
 
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!
 
Zuletzt bearbeitet von einem Moderator:
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...
 
@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.
 
@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.
 
... 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.
 
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.
 
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.
 
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.
 
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 😉
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben