Java:使用SwingUtilities.invokeLater()进行调试

Jas*_*n S 5 java debugging swing event-dispatch-thread

SwingUtilities.invokeLater()经常使用.但是,这样做会使某些情况下的调试变得困难:您无法看到调用的代码的堆栈跟踪SwingUtilities.invokeLater(),因为该代码已经结束了它的执行.

在调用时是否有关于如何设置某种上下文(仅用于调试目的)的建议SwingUtilities.invokeLater(),以便您可以找出导致相关UI事件的原因?

Twi*_*ter 1

重写该方法,添加一个 Log 调用,然后调用真正的调用...警告:您必须将所有调用替换为原始方法。

您甚至可以包装可运行对象并添加上下文编号(例如稍后调用的调用的时间戳)。当可运行程序启动时,它开始打印上下文编号

 public static void myInvokeLater(final Runnable runnable) {
   long ts = System.currentTimeMillis();
   Log.info("call to invoke later, context :" + ts);
   Runnable r = new Runnable() {
            public void run() {
                Log.info("start runnable of invokeLater with context :" + ts);
                runnable.run();
            }
        };
   SwingUtilities.invokeLater(r);
}
Run Code Online (Sandbox Code Playgroud)