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つのボタンを持っています。ボタン 1 - 10 秒 - ボタン 2 - 10 秒 - ボタン 3 - 10 秒 - ボタン 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 のスコープ内にあるためには、ボタンを final にする必要があります。

于 2012-05-10T13:26:03.150 に答える
0

問題は、すべての setVisble 呼び出しが EventDispatchThread ではない 1 つのスレッド内にあることだと思います。あなたは呼び出すことができます:

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