Swing:启用延迟按钮

private void OptionsActionPerformed(java.awt.event.ActionEvent evt) { // After clicking on button X, I want 4 other buttons to show up // in a sequential order ButtonTrue(); } public void ButtonTrue() { Audio_Options.setVisible(true); letsSleep(); Control_Options.setVisible(true); letsSleep(); Display_Options.setVisible(true); letsSleep(); Network_Options.setVisible(true); } public void letsSleep() { try { Thread.sleep(10000); } catch (InterruptedException ex) { Logger.getLogger(MainMenu.class.getName()).log(Level.SEVERE, null, ex); } } 

我有4个按钮。 我希望它们按顺序出现,例如:Button1 – 10秒 – Button2 – 10秒 – Button3 – 10秒 – 按钮4

问题:每当我调用函数“ButtonTrue()”时,它们都会在等待30秒后一起出现。 什么可能导致这个问题发生?

  • 不要将Thread.sleep(int)用于Swing JComponent ,因为阻止了当前的EDT

  • 你看看Swing Timer

你应该使用不同的线程:

 javax.swing.Timer timer = new Timer(10000, new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Update the progress bar... Control_Options.setVisible(true); timer.stop(); } }); timer.start(); 

您的按钮必须是最终的,以便在匿名ActionListener的范围内。

我认为问题是所有setVisble调用都在一个线程内,而不是EventDispatchThread。 你可以试试:

 if(EventQueue.isDispatchThread()) { ButtonTrue(); } else { EventQueue.invokeAndWait(new Runnable() { ButtonTrue(); }); }