Java 为Swing库强制执行EDT线程

Java 为Swing库强制执行EDT线程,java,multithreading,user-interface,Java,Multithreading,User Interface,所有与GUI相关的代码只能从中执行。在Androiddevelopment中,类似这样的东西似乎是强制执行的,因此如果您这样做,您将得到一个异常,例如在主线程中进行网络调用。然而,对于开发Java桌面应用程序,没有这样的东西。很容易忘记EDT,仍然在另一个线程中执行GUI代码。这可能会导致奇怪的故障/bug,因为。在默认情况下,是否有一种方法可以强制每个GUI代码使用EDT,类似于Android更加严格?我不想手动检查所有内容,而是在违反EDT使用建议时得到一个异常。我正在使用 就Java代码而

所有与GUI相关的代码只能从中执行。在
Android
development中,类似这样的东西似乎是强制执行的,因此如果您这样做,您将得到一个异常,例如在主线程中进行网络调用。然而,对于开发
Java
桌面应用程序,没有这样的东西。很容易忘记
EDT
,仍然在另一个线程中执行GUI代码。这可能会导致奇怪的故障/bug,因为。在默认情况下,是否有一种方法可以强制每个GUI代码使用
EDT
,类似于
Android
更加严格?我不想手动检查所有内容,而是在违反
EDT
使用建议时得到一个异常。我正在使用

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

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

有什么方法可以实现此目的吗?

有一个ThreadCheckingRepaintManager,请参见此处:

您可以这样使用它:

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

现在,每当出现EDT问题时,您将在控制台中获得一条信息。

有ThreadCheckingRepaintManager,请参见此处:

您可以这样使用它:

public static void main(String args[]) {
        RepaintManager.setCurrentManager(new ThreadCheckingRepaintManager(true));
        //Create your UI here
    }
现在,当EDT出现问题时,您将在控制台中获得信息