多个setText之间的延迟java
Delay between multiple setText java
我想在每个 if 之间设置一个延迟
我已经用 Thread.sleep() 进行了测试,但这会冻结 gui,我不知道在循环中使用多个摆动计时器是否可行。
我在这里尝试使用摆动计时器并一直冻结图形用户界面,我做错了什么?
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
int i=0;
public void actionPerformed(ActionEvent evt) {
try
{
System.out.print(solucion.get(i)+" "+solucion.get(i+1)+" "+solucion.get(i+2)+" \n"+solucion.get(i+3)+" "+solucion.get(i+4)+" "+solucion.get(i+5)+" \n"+solucion.get(i+6)+" "+solucion.get(i+7)+" "+solucion.get(i+8));
System.out.println("\n");
Btn1.setText(solucion.get(i));
Btn2.setText(solucion.get(i+1));
Btn3.setText(solucion.get(i+2));
Btn4.setText(solucion.get(i+3));
Btn5.setText(solucion.get(i+4));
Btn6.setText(solucion.get(i+5));
Btn7.setText(solucion.get(i+6));
Btn8.setText(solucion.get(i+7));
Btn9.setText(solucion.get(i+8));
i++;
}
catch(IndexOutOfBoundsException e){((Timer)evt.getSource()).stop();} //if it gets a error we are at the end of the list and stop the timer
}
};
new Timer(delay, taskPerformer).start();
如果您希望 guid 不被冻结,您需要在不同的线程中执行它。 运行 它在主线程中将消失导致 guid 冻结。您正在使用 swing,所以要走的路是:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// put your statements and delay here
}
});
使用 Swing Timer
。定时器取代了循环。
每次计时器触发时,您都会设置文本,然后递增 "i" 的值。当 "i" 达到特定值时,您将停止计时器。
请参阅:Jlabel showing both old and new numbers 一个简单的示例来帮助您入门。
阅读 How to Use Swing Timers 上的 Swing 教程部分了解更多信息。
我想在每个 if 之间设置一个延迟
我已经用 Thread.sleep() 进行了测试,但这会冻结 gui,我不知道在循环中使用多个摆动计时器是否可行。
我在这里尝试使用摆动计时器并一直冻结图形用户界面,我做错了什么?
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
int i=0;
public void actionPerformed(ActionEvent evt) {
try
{
System.out.print(solucion.get(i)+" "+solucion.get(i+1)+" "+solucion.get(i+2)+" \n"+solucion.get(i+3)+" "+solucion.get(i+4)+" "+solucion.get(i+5)+" \n"+solucion.get(i+6)+" "+solucion.get(i+7)+" "+solucion.get(i+8));
System.out.println("\n");
Btn1.setText(solucion.get(i));
Btn2.setText(solucion.get(i+1));
Btn3.setText(solucion.get(i+2));
Btn4.setText(solucion.get(i+3));
Btn5.setText(solucion.get(i+4));
Btn6.setText(solucion.get(i+5));
Btn7.setText(solucion.get(i+6));
Btn8.setText(solucion.get(i+7));
Btn9.setText(solucion.get(i+8));
i++;
}
catch(IndexOutOfBoundsException e){((Timer)evt.getSource()).stop();} //if it gets a error we are at the end of the list and stop the timer
}
};
new Timer(delay, taskPerformer).start();
如果您希望 guid 不被冻结,您需要在不同的线程中执行它。 运行 它在主线程中将消失导致 guid 冻结。您正在使用 swing,所以要走的路是:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// put your statements and delay here
}
});
使用 Swing Timer
。定时器取代了循环。
每次计时器触发时,您都会设置文本,然后递增 "i" 的值。当 "i" 达到特定值时,您将停止计时器。
请参阅:Jlabel showing both old and new numbers 一个简单的示例来帮助您入门。
阅读 How to Use Swing Timers 上的 Swing 教程部分了解更多信息。