所有与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");
}
任何方式来获得这个?
答案 0 :(得分:2)
有一个ThreadCheckingRepaintManager,见这里: ThreadCheckingRepaintManager
你可以像这样使用它:
public static void main(String args[]) {
RepaintManager.setCurrentManager(new ThreadCheckingRepaintManager(true));
//Create your UI here
}
现在,只要出现EDT问题,您就会在控制台中收到信息。