-1

我知道我应该为一个特殊的错误提供足够的信息。但不可能重现它。我有一个高度多线程的程序。我有一个带有无限while循环的线程。程序的任何部分都不能中断这个线程。我Thread.currentThread().isInterrupted();尽可能多地检查。但有时会发生线程停止运行并出现一个奇怪的异常堆栈跟踪,告诉它无法在某些 Lable 的 setText 方法中将某些类型转换为布尔值,它指向程序的以下行:

JOptionPane.showMessageDialog(null, "action finished, going to the next!");

我知道我应该换个方式思考!因为我没有标签来设置在这个线程中完成的文本。事实上,在整个程序中,我从不更改 GUI 的任何文本。我只是写到控制台。可能是什么问题?它可能是我的代码中的内存泄漏还是可能是 Java 的错误?

4

1 回答 1

3

我认为这里的问题是你不应该showMessageDialog直接调用。Swing 期望所有 GUI 操作都通过主 Swing 线程,正如在这个答案中所报告的,我怀疑这里的问题是您的线程(不应该直接接触 GUI)和 Swing 线程(这是应该处理这个)。

您可能需要考虑showMessageDialog从 aSwingWorker或使用invokeLater.

希望这可以帮助!

于 2013-11-27T23:57:12.197 回答