2013-04-06 68 views
0

我对Swing很新颖。如何在Java Swing中制作按钮点击块?

itemActionButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg) { 
     itemAction(); 
    } 
}); 

但被点击的,而不是运行在另一个线程这个动作的按钮时,我想父窗体的线程等待,直到它的动作是刷新前完成,使额外的点击等

我怎样才能做到这一点?在的ActionListener

+1

我还以为你。从actionPerformed内部运行该操作将继续阻止EDT。您可以禁用电子按钮(点击),运行在一个SwingWorker的动作和可出租从SwingWorker类的done方法 – MadProgrammer 2013-04-06 02:09:12

+0

保罗,你可以在这里看到的按钮:http://stackoverflow.com/questions/8083768/stop-cancel- swingworker-thread – Gere 2013-04-06 02:11:08

+0

正如已经指出的,我在这里的主线程中运行。事实证明,我正在从别处的TimerTask间接调用'itemAction()'。为了让'itemAction()'在主线程上运行,我不得不使用'SwingUtilities.invokeLater()'。 – 2013-04-12 18:26:16

回答

1

代码执行的EDT,这防止重画和响应其它事件的GUI。

如果你有一个长期运行的任务,你不想阻止EDT,那么你需要使用另一个线程。

阅读来自于Concurrency Swing的教程部分获取更多信息,并通过使用的SwingWorker的溶液。