java.lang.OutOfMemoryError

Sirakov

Mitglied
Guten Abend :)
ich habe ein Konvertor mit 2 Textareas gemacht (für Ein- und Ausgabe), wenn ich reinen Text eingebe - funktioniert alles PEFEKT. Wenn ich eine Datei öffne, dann kommt der Inhalt der Datei in dem ersten Textbereich. Falls die Datei ganz klein ist (d.h. 1-2 Zeilen) wird alles richtig konvertiert, falls aber die Datei größer ist, bekomme ich "java.lang.OutOfMemoryError" als Meldung und der Prozess der Konvertierung wird abgebrochen. Kann mir jemand sagen, wo sich das Problem befindet und wie ich das Problem löse.

Danke,
AA
 
Ein wenig Quellcode wäre recht hilfreich :) .. Normalerweise tritt dieser Fehler auf, wenn dein Programm den für ihn reservierten Speicherplatz im RAM überschreitet. Jedoch sollte für solch ein recht simples Programm der Speicher in jedem Fall ausreichen ... Ich nehme an da läuft in irgendeiner Schleife der Speicher voll, weil Objekte nicht vom Garbage Collector gelöscht werden, da du die Referenzen auf sie nicht löschst ..
 
Hmm, auf Grund deiner Angaben denke ich dass der Fehler in deinem Programm liegt - wie du es löst kann ich dir mit den par Infos nicht sagen...

Vielleicht wäre es Sinnvoll, ein paar Zeilen Code zu posten... z.B. der Teil in dem du die Datei einliest.. sollte so viel nicht sein!
 
Hallo,
ich wollte bisschen Sourcecode posten, wusste aber nicht, wo genau sich das Problem befindet. Hier ist der Teil, wo ich die Datei einlese:

-------------
final JMenuItem openFile = new JMenuItem(MainWin.openNewFile);
editMenu.add(openFile);
openFile.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent ae) {
final int retval = fc.showOpenDialog(MainWin.this);
if (JFileChooser.APPROVE_OPTION == retval) {
final File myFile = fc.getSelectedFile();
editArea1.setText("");
try {
FileReader datei;
datei = new FileReader(myFile);

final BufferedReader dat_read = new BufferedReader(datei);
name = dat_read.readLine();

while (null != name) {
editArea1.append(name+"\n");
name = dat_read.readLine();
}
dat_read.close();
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, new StringBuffer().append("File not found!").toString());
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}
});
-------------

Vielleicht ist das Problem winzig, aber ich finde es leider nicht :(

Grüß,
Atanas

PS. Die Datei wird einwandfrei gelesen.
 
hallo,
manchmal hilft es den Stack-Trace nachzugehen, um z.B. eventuelle unerwartete Schleifen aufzudecken.
Eine weitere Möglichkeit bieten Ausgaben an makante Punkten um zu schauen wo oder ab wann es genau hakt.

takidoso
 
Hallo!

ich vermute mal, dass der Hase in deiner "Kovertierung" im Pfeffer liegt.
Was machst du da genau und poste doch bitte den "relevanten" Codeabschnitt der die Kovertierung leistet.

Gruß Tom
 
ein zweiter Blick in Deinen Code gibt mir schon einen gewissen Verdacht, aber vielleicht gehst Du erstmal obige Tips nach, vielleicht kommst Du dann drauf, oder schau doch noch mal ganz genau auf Deine Schleifenabbruchbedingung.

takidoso
 
also....ich konvertiere kyrillische Buchstaben im Unicode:

-----------
private static String m_decode(final String eingabe) {
StringBuffer convert_eingabe = new StringBuffer(eingabe);
int len = convert_eingabe.length();
int j = 0;
for (int i = 0; i < len; i += j) {
final char b = convert_eingabe.charAt(i);
Label:if (b == 'À') {
convert_eingabe.replace(i, i + 1, "?");
j = 7;
break Label;
} else if (b == 'Á') {
convert_eingabe.replace(i, i + 1, "?");
j = 7;
break Label;
.
.
.
} else {
convert_eingabe = new StringBuffer("YOU HAVE ENTERED A NON VALID SYMBOL!");
i = len;
break Label;
}
len = convert_eingabe.length();
}
final String s = convert_eingabe.toString();
return s;
}

-----------
wie ich schon mal erwähnt habe, funktioniert alles PERFEKT, wenn ich reinen Text eingebe (egal wie lang), aber sobald ich eine Textdatei mit mehreren Zeilen öffne, kriege ich das Problem.

Grüß,
AA

PS. Wie ich gerade gesehen habe, wird die Source-Code falsch Dargestellt, richtig wäre else if (b == '?') {convert_eingabe.replace(i, i + 1, "& #1041;");
 
Zuletzt bearbeitet:
Zurück