【发布时间】:2015-09-02 01:54:09
【问题描述】:
如何知道EDT 被阻塞(不是通过视觉而是通过检查线程本身)?有什么办法吗?
我正在完成我最后的大学毕业任务,其中有一堆图表,但对 Swing EDT(通常是 Java)知之甚少。
看看这篇文章:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// task here
}
});
如果我们在块上做一些修改gui组件的任务(包括调用另一个线程),那已经是正确的方法了吗?
而且由于 EDT 是单线程环境,还有什么(至少)一个部分/示例阻塞 EDT
除了直接在 GUI 内调用Thread.start()。我应该调用什么方法来识别EDT 被阻止
在我问这个问题之前,我已经阅读了一些文档(但它未能以简单的解释向我解释如何防止阻塞 EDT。)
提前致谢
【问题讨论】:
-
AFKAI 没有真正的方法可以知道 EDT 何时被阻止。您可以使用
SwingUtilities.isEventDispatchThread()来检测您何时在 EDT 中执行,并且应该使用SwingWorker、SwingTimer或Threads 在 EDT 之外执行长时间运行的任务。invokeLater将在 EDT 的上下文中执行Runnable -
@MadProgrammer 感谢您的回复,如果是的话,是否有任何示例表明我们阻止了 EDT(谷歌只是混淆了一些预先文件。)
-
Thread.sleep(1000)在 EDT 的上下文中调用将阻止它运行 1 秒。 -
@MadProgrammer,嗯,我明白了,你能在回答中解释更多吗,我知道这个评论框非常有限。
-
我还是不确定你在问什么
标签: java multithreading swing