【发布时间】:2009-02-26 12:26:02
【问题描述】:
我目前正在处理一个 Java 项目,并且遇到了堆栈溢出错误的问题。发生的事情是程序首先读入一个大约 1,500,000 字的文件并将其添加到一个数组中。然后它读入一个大约 600 字的小文件并将其添加到一个数组中。它检查 600 字文件中有多少字出现在另一个文件中。大文件中的每个单词都与一个数字相关联。因此,当它在大文件中找到一个单词时,它会获取该单词及其相关整数的副本并将其添加到数组中。我的问题是我收到堆栈溢出错误:
"AWT-EventQueue-0" java.lang.StackOverflowError
问题是当小文件大约 200 字时,程序运行良好。 程序必须执行的最后一行是:
result.setPage("file:file for gui NEW.html");
(其中结果是 JEditorPane)
由于某种原因,当小文件为 600 字时,我收到了 stackoverflow 错误,但在 200 字时运行正常。它运行最后一行并生成此文件,但不会将其打印到编辑器窗格,因为这是异常发生时。
谁能帮助告诉我为什么会发生这种情况以及我该如何解决它? 谢谢。
控制台中的完整错误是:
线程“AWT-EventQueue-0”中的异常 java.lang.StackOverflowError 在 sun.awt.SunToolkit.getSystemEventQueueImplPP(未知来源) 在 sun.awt.SunToolkit.getSystemEventQueueImpl(未知来源) 在 java.awt.Toolkit.getEventQueue(未知来源) 在 java.awt.EventQueue.isDispatchThread(未知来源) 在 javax.swing.SwingUtilities.isEventDispatchThread(未知来源) 在 javax.swing.JComponent.revalidate(未知来源) 在 javax.swing.plaf.basic。 BasicTextUI$RootView.preferenceChanged(未知来源) 在 javax.swing.text.View.preferenceChanged(未知来源) 在 javax.swing.text.BoxView.preferenceChanged(未知来源) 在 javax.swing.text.View.preferenceChanged(未知来源) 在 javax.swing.text.BoxView.preferenceChanged(未知来源) 在 javax.swing.text.View.preferenceChanged(未知来源) 在 javax.swing.text.BoxView.preferenceChanged(未知来源) (......永远重复......)编辑:所以基本上看起来 GUI 中的两个控件一直在调用彼此的 preferenceChanged() 方法。
Gui 似乎是最可能的原因,因为当我在没有 gui 的情况下运行程序并将文件的内容打印到控制台时,它可以正常工作。我不知道究竟是什么导致了这个问题。我没有使用偏好更改例程。只有像 setSize()、setVisible() 之类的东西会导致它吗?
【问题讨论】: