Java 有没有办法让ActionListener在读取代码时执行代码?

Java 有没有办法让ActionListener在读取代码时执行代码?,java,time,actionlistener,Java,Time,Actionlistener,我注意到,每当调用ActionListener方法时,它似乎会累积结果,然后在该方法完成后,它会立即显示所有结果。例如,在我的程序中,我有几个waitint毫秒方法调用。有了这段代码,每当我按下一个按钮,都会有一个长时间的暂停,它似乎被冻结了,但随后它会立即显示所有内容。有没有办法让它在读取代码时执行该代码?使用swingworker类,该类在后台进程中使用方法doInBackground,同时您可以调用其发布方法来处理进程,以显示后台处理的结果请参阅 您不应该在Gui线程上的任何侦听器中调用w

我注意到,每当调用ActionListener方法时,它似乎会累积结果,然后在该方法完成后,它会立即显示所有结果。例如,在我的程序中,我有几个waitint毫秒方法调用。有了这段代码,每当我按下一个按钮,都会有一个长时间的暂停,它似乎被冻结了,但随后它会立即显示所有内容。有没有办法让它在读取代码时执行该代码?

使用swingworker类,该类在后台进程中使用方法doInBackground,同时您可以调用其发布方法来处理进程,以显示后台处理的结果请参阅
您不应该在Gui线程上的任何侦听器中调用wait。使用定时回调,例如在此处使用my GuiTimer类:

根据您想要实现的目标,您可以使用SwingWorker或Swing计时器

查看和了解更多详细信息


worker将允许您在EDT之外的后台运行长时间运行或阻塞进程,但提供了将更新重新同步到UI的方法。计时器将在EDT上下文中调用已注册的ActionListener,允许您在指定的延迟后从其中安全地更新UI,并且可能会重复

在没有看到任何代码的情况下,您希望我们说什么?您至少需要发布一个最小、完整且可验证的示例。查看SwingWorker或Swing Timer,看看它们是否满足您的要求requirements@MadProgrammer我在文件上找到SwingWorker,但找不到Swing计时器。。。你能给我一个链接吗?谢谢核心库中至少有3个计时器类,您要查找的是aka Swing Timer。还可以看看@MadProgrammer,它工作得很好!谢谢你的帮助!既然你的回答是评论而不是技术上的问题,那么我该如何将这个问题标记为已回答?老实说,一个SwingWorker会更简单、更容易使用,并获得相同的基本结果。摆动计时器也可以做同样的事情job@MadProgrammer我觉得在任何时间使用Thread.sleep都不是一个好主意。无论SwingWorkers是创建新线程还是从线程池中获取一个线程,它都会导致该线程在一段时间内不执行任何操作,同时保留资源线程id、堆栈内存等。。。还是我遗漏了什么?这取决于OP的要求。就个人而言,如果他们需要定期调用方法,Swing计时器就可以了,如果他们需要执行长时间运行的操作,SwingWorker会更好。至于Thread.sleep的用法,我唯一的规则是,不要在EDT的上下文中使用它。用户可能不会注意到启动/启动线程所需的时间,冻结的UI是您还必须意识到,几乎任何计时器都将依赖于thread.sleep,因为没有Java计时器可以保证精确的时间,它们只能保证至少计时;但是您指出的这些漂亮的swing计时器使用一个线程按照文档进行所有计时,不管您实例化了多少个计时器,就像单线程ScheduledThreadPoolExecutor一样,我非常喜欢。这比每隔一秒就开始一个新的线程要好,不是吗。但对了,它们必须在内部使用Thread.sleep,除非这里使用了一些奇特的操作系统特定的低级定时回调,我对此表示怀疑