如何编写响应速度快的Swing 应用程序,应注意以下两点:
1。Time-consuming tasks should not be run on the Event Dispatch Thread. Otherwise the application becomes unresponsive。
耗时任务不要放到事件调度线程(EVENT DISPATCH THREAD)上执行,否则程序就会失去响应。
2。Swing components should be accessed on the Event Dispatch Thread only. Swing
组件只能在事件调度线程上访问。
因此处理耗时任务时,首先要启动一个专门线程,将当前任务交给这个线程处理,而当前处理函数立即返回,继续处理后面未决的事件。
其次,在为耗时任务启动的线程访问Swing 组件时,要使用SwingUtilties. invokeLater 或者SwingUtilities.invokeAndWait 来访问,
invokeLater 和invokeAndWait 的参数都是一个Runnable 对象,这个Runnable 对象将被像普通事件处理函数一样在事件调度线程上执行。
这两个函数的区别是,invokeLater 不阻塞当前任务线程,invokeAndWait 阻塞当前线程,直到Runnable 对象被执行返回才继续