ファイルのテキストを JTextPane に追加しようとしています。これは、10Mb 未満のファイルにはうまく機能しますが、それを超えるサイズ (および私は ~50Mb をチェックしました) では、悪名高い例外 'OutOfMemoryError: Java heap space' が発生します。
両方のメソッドが静的で、while(line!=null) の下のすべての反復に「new」がない場合、なぜ Java ヒープ メモリを取得するのかを理解しようとしています。通常の txt エディターでファイルを開くことができる場合、このコードの実行に失敗するのはなぜですか?
コードは次のようになります。
public static void appendFileData(JTextPane tPane, File file) throws Exception
{
try{
//read file's data
BufferedReader br = new BufferedReader(new FileReader(file));
String line = br.readLine();
try{
while (line != null)
{
JTextPaneUtil.appendToConsole(tPane, "\n"+line,Color.WHITE, "Verdana", 14);
line = br.readLine();
}
}finally
{
br.close();
}
}catch(Exception exp)
{
throw exp;
}
}
appendToConsole は次のとおりです。
public static void appendToConsole(JTextPane console, String userText, Color color, String fontName, int fontSize)
{
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, color);
aset = sc.addAttribute(aset, StyleConstants.FontFamily, fontName);
aset = sc.addAttribute(aset, StyleConstants.FontSize, fontSize);
aset = sc.addAttribute(aset,StyleConstants.Alignment, StyleConstants.ALIGN_CENTER);
int len = console.getDocument().getLength();
console.setCaretPosition(len);
console.setCharacterAttributes(aset, false);
console.replaceSelection(userText);
}