ich habe folgenden Fall vorliegen:
Ich habe in einem eigenem .java-File folgendes deklariert:
public class TestPunkte
{
public final static Punkt[] Kontur = new Punkt[]
{
new Punkt(-1, 137, 0),
new Punkt(0, 138, 1),
new Punkt(0, 139, 2),
new Punkt(1, 139, 3),
new Punkt(1, 140, 4),
new Punkt(2, 141, 5),
...
so geht es dann ca. 9000 Zeilen weiter.
};
}
Wenn ich mein Programm durchstarte (ich benutze übrigens JDK1.4.1
unter netbeans) kommt folgende Exception:
java.lang.ClassFormatError: UmrandungZuDreiecke/TestPunkte (Code of a
method longer than 65535 bytes)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:502),
blabla...
Ooops??? Das im 21. Jahrhundert unter einer modernen
Programmiersprache?
Das kann doch nicht war sein oder? Ich dachte die 8-Bit Prozessoren
haben wir nun langsam hinter uns?
Kann mir einer von Euch verraten wie man es richtig macht?
Oder wie man auf das Large-Modell umschaltet?
Aus einer Datei zur Laufzeit einparsen wollte ich prinzipiell nicht.
Danke für gute Ideen im voraus,
Mark
> public final static Punkt[] Kontur = new Punkt[]
> {
> new Punkt(-1, 137, 0),
> new Punkt(0, 138, 1),
> new Punkt(0, 139, 2),
> new Punkt(1, 139, 3),
> new Punkt(1, 140, 4),
> new Punkt(2, 141, 5),
> ...
> so geht es dann ca. 9000 Zeilen weiter.
Automatisch generiert, oder?
> Wenn ich mein Programm durchstarte (ich benutze übrigens JDK1.4.1
> unter netbeans) kommt folgende Exception:
>
> java.lang.ClassFormatError: UmrandungZuDreiecke/TestPunkte (Code of a
> method longer than 65535 bytes)
> at java.lang.ClassLoader.defineClass0(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:502),
> blabla...
Tja, der Java-Compiler ist zu doof, bereits beim Übersetzen
festzustellen, dass die Methode viel zu lang ist.
> Ooops??? Das im 21. Jahrhundert unter einer modernen
> Programmiersprache?
> Das kann doch nicht war sein oder? Ich dachte die 8-Bit Prozessoren
> haben wir nun langsam hinter uns?
> Kann mir einer von Euch verraten wie man es richtig macht?
Nimm mehrere Methoden...
> Oder wie man auf das Large-Modell umschaltet?
So was gibt es nicht.
> Aus einer Datei zur Laufzeit einparsen wollte ich prinzipiell nicht.
Warumm nicht, das wäre IMHO die beste und kleinste Lösung.
Beachte bitte, dass du jetzt ungefähr den folgenden Programmcode für
jedes Array-Element erzeugst:
Schiebe 1 auf den Stack.
Schiebe 0 auf den Stack.
Schiebe 137 auf den Stack.
Erzeuge ein neues Objekt der Klasse "Punkt"
Rufe Konstruktor <init>(III)V auf
Schiebe 5 (den Index) auf den Stack
Hole Arrayobjekt aus statischer Variable
Führe a[5] = punkt aus.
Konstante Strings können übrigens bei Java beliebig lang sein, ich würde
daher eventuell die Koordinaten in einen String kodieren und diesen dann
parsen, um das Array aufzubauen.
bye
--
Stefan Matthias Aust // "Ist es normal, nur weil alle es tun?" -F4
Und warum dann nicht
public final static Punkt[] Kontur = new Punkt[900];
statuc {
int x = -1;
int y = 137;
for (int z = 0; z < Kontur.length; z++) {
Kontur[z] = new Punkt(x, y, z);
if ((z % 2) == 0) x++;
if (((z+1) % 3) != 0) y++;
}
}
oder welcher Algorithmus auch immer dahinter stecken mag.
Tobias
In eine Datei auslagern und in einer Schleife einlesen.
A.G.
Weil einfach kein Algorthmus dahinter steckt. Es handelt sich um
gemessene Werte.
Aber ich nehme dann einfach mal zur Kenntnis, dass java soetwas nicht
kann und parse ein externes File ein. Schade, ich dachte ich könnte
mich mal aufs Problem konzentrieren...
Mark
> Weil einfach kein Algorthmus dahinter steckt. Es handelt sich um
> gemessene Werte.
Oh, auf den ersten Blick sah das aus wie diese Intelligenztests, wo man
mathematische Reihen ergänzen muss;)
Tobias