多个setText java之间的延迟
我想在每一个if之间加上一个延迟 我曾经使用过Thread.sleep(),但这会冻结gui,我不知道在一个循环中使用多个swing计时器是否可行。 在这里,我尝试使用一个swing计时器并一直冻结gui,我做错了什么多个setText java之间的延迟,java,swing,delay,freeze,Java,Swing,Delay,Freeze,我想在每一个if之间加上一个延迟 我曾经使用过Thread.sleep(),但这会冻结gui,我不知道在一个循环中使用多个swing计时器是否可行。 在这里,我尝试使用一个swing计时器并一直冻结gui,我做错了什么 int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { int i=0; public void actionPerformed(A
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
}
});
如果希望guid不冻结,则需要在其他线程中执行它。在主线程中运行它将导致guid冻结。您使用的是swing,因此方法是:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// put your statements and delay here
}
});
使用
摆动计时器
。计时器取代了循环
每次定时器启动时,您都会设置文本,然后增加“i”的值。当“i”达到特定值时,停止计时器
请参阅:以获取一个简单的示例
有关更多信息,请阅读上的Swing教程部分。使用
Swing计时器。计时器取代了循环
每次定时器启动时,您都会设置文本,然后增加“i”的值。当“i”达到特定值时,停止计时器
请参阅:以获取一个简单的示例
阅读Swing教程中的部分以了解更多信息。我尝试使用Swing计时器(我在问题中发布了代码),但它一直冻结GUI忘记它,问题是列表“solucion”没有我需要的值。swing计时器工作正常,谢谢。@juaneroa 1)ActionListner中没有9 setText(…)语句。你只需要一条语句就可以根据索引设置当前值2)你不需要使用IndexOutOfBounds异常来停止循环,使用数组的大小。我尝试过使用swing计时器(我在问题中发布了代码),但它一直冻结GUI。忘了它吧,问题是列表“solucion”没有我需要的值。swing计时器工作正常,谢谢。@juaneroa 1)ActionListner中没有9 setText(…)语句。只需一条语句即可根据索引设置当前值2)如果不使用IndexOutOfBounds异常来停止循环,请使用数组的大小。