0

ファイルのテキストを 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);
}
4

2 に答える 2