在一个多线程的GUI应用中,主线程负责创建和显示窗口,而另一个线程负责更新GUI组件的状态(如标签文本、进度条进度)。如果在更新GUI组件状态时,直接在非主线程中调用GUI组件的方法,可能会引发什么问题?应采用哪种方式解决此问题?
答案解析
A选项错误,Java Swing不是线程安全的,不允许在非主线程中直接更新GUI。B选项错误,使用synchronized关键字会阻塞事件派发线程,导致界面卡顿,而不是解决问题。D选项的同步机制不适用于GUI的更新,应该交给事件派发线程处理。C选项正确,`SwingUtilities.invokeLater`方法可以将GUI更新操作放入事件派发线程(Event Dispatch Thread,EDT)中执行,保证了线程安全,避免了界面无响应或崩溃的问题。因此,C为最优解。
正确答案:C