JTextArea 空间不足?可以容纳多少文字,我可以容纳更多吗?

Posted

技术标签:

【中文标题】JTextArea 空间不足?可以容纳多少文字,我可以容纳更多吗?【英文标题】:JTextArea ran out of room? How much text can fit, can I fit more than that? 【发布时间】:2013-04-25 14:42:45 【问题描述】:

我正在为我在素数中找到的模式开发可视化工具。这是 StackMath:Patterns In Primes 的数学链接和 StackCodeReview 的完整代码:Optimization of the Code

我的问题似乎是我的 JTextArea 空间不足。

错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 at javax.swing.text.GapContent.allocateArray(Unknown Source)
 at javax.swing.text.GapVector.resize(Unknown Source)
 at javax.swing.text.GapVector.shiftEnd(Unknown Source)
 at javax.swing.text.GapContent.shiftEnd(Unknown Source)
 at javax.swing.text.GapVector.open(Unknown Source)
 at javax.swing.text.GapVector.replace(Unknown Source)
 at javax.swing.text.GapContent.insertString(Unknown Source)
 at javax.swing.text.AbstractDocument.handleInsertString(Unknown Source)
 at javax.swing.text.AbstractDocument.insertString(Unknown Source)
 at javax.swing.text.PlainDocument.insertString(Unknown Source)
 at javax.swing.JTextArea.append(Unknown Source)
 at PrimeSandbox.main(PrimeSandbox.java:67)

第 67 行:

 screen.append(Arrays.toString(primesLL.toArray()) + "\n");

所以我唯一能想到的是我在 TextArea 中有很多文本。我可以增加它可以容纳的尺寸吗?或者我必须创建一个方法来将一些未显示的文本保存到字符串中并在滚动时重写它? (我真的不想)

【问题讨论】:

【参考方案1】:

快速而肮脏的答案是给自己更多的堆空间:

java -Xmx2g PrimeSandbox←给你2GB,例如

这是否是一个好的长期解决方案取决于您是否只需要“多一点”,或者您是否有严重的记忆问题。

您不会通过在应用程序中移动字符串来节省任何内存。 JTextArea 中显示的字符串不会比类中字段中的字符串更占用内存。写入磁盘将是您唯一的其他选择。

【讨论】:

哦,这与整个程序本身有关,它占用了操作系统给它的所有空间? @BumSkeeter 是的。异常发生的地方可能只是偶然。您要么有内存泄漏(例如,当您不应该持有对象时),或者您只需要更多内存。在后一种情况下,增加堆。在前一种情况下,分析可能会对您有所帮助。 你能在 OP 中查看我的代码的链接并告诉我你认为是哪种情况吗?我很确定这只是我的内存不足。我正在处理一个 71K 素数列表。所以这是一个海量的数据。

以上是关于JTextArea 空间不足?可以容纳多少文字,我可以容纳更多吗?的主要内容,如果未能解决你的问题,请参考以下文章

java中 JTextArea类的属性和方法是啥

Java 中 JTextArea 和 JTextField 的有啥区别?

如何将 JTextArea 中的选定文本转换为字符串?

微信图文内插入的图片文字如何实现左右或上下滑动?

java中TextArea/JTextArea的对齐方式怎么设置的?

在 JTextArea 中添加边距?