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秒后一起出现。什么可能导致这个问题发生?
答案 0 :(得分:5)
不要将Thread.sleep(int)
用于Swing JComponent,因为阻止current EDT
您已查看Swing Timer
答案 1 :(得分: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的最终范围。
答案 2 :(得分:0)
我认为问题是所有setVisble调用都在一个线程内,而不是EventDispatchThread。您可以尝试致电:
if(EventQueue.isDispatchThread()) {
ButtonTrue();
} else {
EventQueue.invokeAndWait(new Runnable() {
ButtonTrue();
});
}