我想要一個文件的文本追加到我的JTextPane。這對於10Mb以下的文件非常適用,但對於大小超過它的文件(我檢查了〜50Mb),我得到了臭名昭着的異常'OutOfMemoryError:Java heap space'。追加大的文本中「的OutOfMemoryError到的JTextPane結果:Java堆空間
我試圖理解爲什麼會出現Java堆內存,如果這兩種方法都是靜態的,下的,而每一次迭代就沒有「新」(線!= NULL)。如果我可以在常規的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);
}
這可能是因爲你的文件是不是有一個換行符(如:二進制可執行文件) – Chris