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