因为你只用了一个线程。
在按钮按下去之后,CPU转去执行ActionPerformed()。这时,系统就封锁用户界面的运行,按钮自然就弹不起来了。
你应该启动另一个工作线程来执行ActionPerformed(),不过由于Swing类的大部分方法都是不同步的,你要自己实现线程的同步。否则你的GUI就会损坏。

解决方案 »

  1.   

    Java的Swing是单线程的。像绘制阿都发生在AWT-EventQueue线程中。当按钮按下,会触发Action事件,此事件会放入AWT-EventQueue队列中等待运行,而由于按钮被按下,需要重绘其外观,这些也会放到AWT-EventQueue队列中,所以只有等到Action事件运行完毕才重绘按钮,所以正如楼上说的,要把ActionPerformed()方法中费时的代码放在另一个线程中!