2
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 - 10seconds - Button2 - 10 seconds - Button3 - 10seconds - Button 4

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

4

3 回答 3

5
于 2012-05-10T13:23:19.843 回答
0

您应该为此使用不同的线程:

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 的范围内。

于 2012-05-10T13:26:03.150 回答
0

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

if(EventQueue.isDispatchThread()) {
    ButtonTrue();
} else {
    EventQueue.invokeAndWait(new Runnable() {
        ButtonTrue();
    });
}
于 2012-05-10T13:27:20.247 回答