Moin,
ich habe hier einen Generator der aus einem XML Schema Java Klassen erzeugt. Seit langem wollte ich um diesen Kommandozeilengenerator endlich mal ne GUI stricken. Gesagt getan hab ich das dann auch gemacht.
Der Generator selber ist zweigeteilt. Er sammelt Imformationen aus dem Schema in einen Vector und erzeugt dann aus dem Vector im Moment nur Java Klassen (C Klassen sind geplant). Die eigentliche Zeit geht beim Sammeln der Informationen drauf da das XML Schema 1,2MB gross ist und sehr viele Vergleiche, Schleifen etc durchlaufen werden. Ich dachte mir also, es sei vieleicht eine gute Idee wenn man diesen Vector einfach serialisiert um ihn dann beim nächsten Programmstart einfach einlesen zu können und sich so die Zeit zum Parsen zu sparen. Ich habe also einfach erstmal überall wo benötigt das Serializeable interface implementiert und dann einen Thread gestartet der den Vector innerhalb der GUI rausschreibt..
Erst hab ich es nur mit newThread() versucht was mir eine StackoverflowException eingebracht hat. Aber auch den Stack zu erhöhen brachte keinen Erfolg (siehe unten, im Moment irgendwas bei 14MB wenn der Parameter denn Bytes sind)
Hat jemand nen Tip für mich wie ich meinen Vector raus bekomme? Der ist recht gross, in dem Vector werden alle Paramter für knapp 500 Klassen gehalten.
Gruss,
Isa
Edit: Der gesammte Stacktrace ist sicher 6 Seiten lang
ich habe hier einen Generator der aus einem XML Schema Java Klassen erzeugt. Seit langem wollte ich um diesen Kommandozeilengenerator endlich mal ne GUI stricken. Gesagt getan hab ich das dann auch gemacht.
Der Generator selber ist zweigeteilt. Er sammelt Imformationen aus dem Schema in einen Vector und erzeugt dann aus dem Vector im Moment nur Java Klassen (C Klassen sind geplant). Die eigentliche Zeit geht beim Sammeln der Informationen drauf da das XML Schema 1,2MB gross ist und sehr viele Vergleiche, Schleifen etc durchlaufen werden. Ich dachte mir also, es sei vieleicht eine gute Idee wenn man diesen Vector einfach serialisiert um ihn dann beim nächsten Programmstart einfach einlesen zu können und sich so die Zeit zum Parsen zu sparen. Ich habe also einfach erstmal überall wo benötigt das Serializeable interface implementiert und dann einen Thread gestartet der den Vector innerhalb der GUI rausschreibt..
Erst hab ich es nur mit newThread() versucht was mir eine StackoverflowException eingebracht hat. Aber auch den Stack zu erhöhen brachte keinen Erfolg (siehe unten, im Moment irgendwas bei 14MB wenn der Parameter denn Bytes sind)
Hat jemand nen Tip für mich wie ich meinen Vector raus bekomme? Der ist recht gross, in dem Vector werden alle Paramter für knapp 500 Klassen gehalten.
Gruss,
Isa
Edit: Der gesammte Stacktrace ist sicher 6 Seiten lang
Code:
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == menuItem_serializeData)
{
new Thread(null, null, "Thread-" + Thread.activeCount() + 1, 15242880)
{
public void run()
{
try
{
Vector v = getComplexTypeList().getListButtonPanel().getVCore();
ObjectOutputStream objOut = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream("C:/test.ser")));
objOut.writeObject(v);
objOut.close();
}
catch (FileNotFoundException fnfe)
{
fnfe.printStackTrace();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}.start();
}
}
Code:
java.lang.StackOverflowError
at java.io.ObjectOutputStream$BlockDataOutputStream.write(ObjectOutputStream.java:1601)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1323)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
at org.apache.xerces.dom.NodeImpl.writeObject(NodeImpl.java:2026)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:795)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1294)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)