我正在尝试将文件文本附加到我的 JTextPane 中。这对于小于 10Mb 但大于其大小的文件(我检查了 ~50Mb)非常有用,我得到了臭名昭著的异常“OutOfMemoryError:Java 堆空间”。
我试图理解如果两种方法都是静态的并且在while(line!= null)下的每次迭代中都没有“新”,为什么我会获得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);
}