2017-06-20 39 views
0

所有与GUI相关的代码只能从EDT执行。在Android开发中,类似这样的东西似乎被强制实施,所以如果你这样做,你会得到一个例外。在主线程中进行网络调用。但是,对于开发Java桌面应用程序,没有这样的事情。很容易忘记EDT并且仍然在另一个线程中执行GUI代码。这可能会导致奇怪的毛刺/错误,因为Swing is not thread-safe。有没有办法在默认情况下强制执行每个GUI代码的EDT的用法,类似于Android更严格吗?我不想手动检查所有内容,如果违反了EDT使用建议,则会发生异常。我正在使用IntelliJ IDEA强制EDT线程用于Swing库

在Java代码中,像可以对每个自动插入下列条款Swing库方法:

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

任何方式来获得吗?

回答

2

有一个ThreadCheckingRepaintManager,在这里看到: ThreadCheckingRepaintManager

您可以使用它像这样:

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

现在你只要有EDT问题在控制台中的信息。