我知道我应该为特殊错误提供足够的信息。但是不可能重现它。我有一个高度多线程的程序。我有一个带有无限while循环的线程。程序的任何部分都不能中断此线程。我尽可能多地检查Thread.currentThread().isInterrupted();
。
但有时会发生线程停止运行时出现一个奇怪的异常堆栈跟踪,它告诉它无法将某些类型转换为某些Lable的setText方法中的布尔值,它指向程序的以下行:
JOptionPane.showMessageDialog(null, "action finished, going to the next!");
我知道我应该以不同的方式思考!因为我没有标签来设置在这个帖子中完成的文本。事实上,在整个程序中,我从不更改GUI的任何文本。我只是写到控制台。可能是什么问题?它可能是我的代码中的内存泄漏,也可能是Java的错误?
答案 0 :(得分:3)
我认为这里的问题是你不应该直接调用showMessageDialog
。 Swing期望所有GUI操作都通过主Swing线程,而as reported in this answer我怀疑这里的问题是你的线程(不应该直接触摸GUI)和Swing线程(这是应该处理这个。)
您可以考虑从showMessageDialog
或使用SwingWorker
开始关注invokeLater
。
希望这有帮助!