强制Swing库的EDT线程

时间:2017-06-20 08:43:16

标签: java multithreading user-interface

所有与GUI相关的代码只能从EDT执行。在Android开发中,类似的内容似乎是强制执行的,所以如果您执行此操作,您将获得例外情况。在主线程中进行网络调用。但是,对于开发Java桌面应用程序,没有这样的事情。很容易忘记EDT并且仍在另一个线程中执行GUI代码。这可能会导致奇怪的故障/错误,因为Swing is not thread-safe。有没有办法在默认情况下强制执行EDT对每个GUI代码的使用,类似于Android更严格的方式?我不想手动检查所有内容,而是在违反EDT使用建议的情况下获得异常。我使用IntelliJ IDEA

就Java代码而言,可以为每个Swing库方法自动插入以下内容:

if(!SwingUtilities.isEventDispatchThread())
{
    throw new IllegalStateException("EDT property violated");
}

任何方式来获得这个?

1 个答案:

答案 0 :(得分:2)

有一个ThreadCheckingRepaintManager,见这里: ThreadCheckingRepaintManager

你可以像这样使用它:

public static void main(String args[]) {
        RepaintManager.setCurrentManager(new ThreadCheckingRepaintManager(true));
        //Create your UI here
    }

现在,只要出现EDT问题,您就会在控制台中收到信息。