多个setText java之间的延迟

多个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

我想在每一个if之间加上一个延迟 我曾经使用过Thread.sleep(),但这会冻结gui,我不知道在一个循环中使用多个swing计时器是否可行。

在这里,我尝试使用一个swing计时器并一直冻结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
      }
  });

如果希望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异常来停止循环,请使用数组的大小。