从EDT多次重绘JPanel

rya*_*tte 1 java swing

我有一个带有一些JButton的JPanel.单击JButtons时,将调用事件处理程序.在这个事件处理程序中,我希望能够多次重绘JPanel.在几秒钟内,此事件处理程序中发生了大量处理,我需要能够更新JPanel以向用户显示增量更新.但是,当我repaint()在事件处理程序中调用JPanel时,似乎什么也没发生.JPanel等待重绘,直到事件处理程序返回.

我尝试过使用该repaint(long tm)方法,但这似乎没有帮助.如何在EDT中多次重新绘制JPanel的行为?

cop*_*peg 5

Swing是单线程的,因此事件处理程序和绘制发生在单个线程(EDT)上.如果您的计算花费时间并尝试在EDT上执行此操作,则不能执行重新绘制(或其他任何操作).要解决此问题,请在单独的线程上执行长时间运行的任务或使用SwingWorker