2012-05-14 122 views
6

如果您正在修改GUI并且您处于AWT事件调度线程(如ActionListener?)中,您应该使用SwingUtilities.invokeLater(Runnable)吗?AWT事件调度中的SwingUtilities.invokeLater线程

+0

这取决于你想要完成什么。 – Jeffrey

+0

@Jeffrey对不起,我编辑了这个问题。 – Stripies

+3

这仍然取决于你想要完成什么。当你在'ActionListener'的'actionPerformed'方法中时,你在EDT上。但是,有些情况下,在所有其他侦听器处理完相同的事件后,您需要执行某些操作,在这种情况下,您应该使用'invokeLater'。那么你究竟在做什么? – Jeffrey

回答

5

您必须始终在Event Dispatch Thread(EDT)中执行GUI更新。然而,正如Jeffrey在评论中指出的那样,Swing对象上的ActionListener.actionPerformed方法是从EDT调用的已经

如果您只是想在JButton把目光启用/ unenabled或从JList添加/删除项目,您通过制作一个Swing组件的ActionListener这些变化,那么你不应该有援引SwingUtilities.invokeLater明确。

+1

+1,如果OP试图清除“JTextComponent”或重新定位“JScrollBar”,则可能需要调用“invokeLater”。但看到他只启用/禁用JButton并修改JList,事实并非如此。 – Jeffrey

+0

@Jeffrey如果我这样做,为什么会这么做? – Stripies

+0

只要我们在EDT,使用'invokeLater'就没有用处了。显然,如果我们想在以后的某个时间点运行某些东西,就会出现与往常一样的限制(即仅仅因为我们从EDT启动线程根本无助于我们)。 – Voo

相关问题