迭代器停止后,Java不会更改接口上的值

时间:2013-08-30 14:59:22

标签: java iterator label jdialog

我有这个问题。

我正在做一个简单的游戏,用JDialog找到一个数字。当我按下“START”按钮时,数字必须改变它,但是在迭代器停止后数字不会改变。

boolean found = False;
Random random = new Random();


    for (int i = 0; i < 10 && !found; i++) {
            try {
                Thread.sleep(100);
                int n = random.nextInt(10)+1;
                        lblNewLabel_1.setText(String.valueOf(n));

                if(n == numeroLoteria){
                        found = true;
                        System.out.println("Encontrado numero "+n+"!");
                }
                        System.out.println("Iteracion "+i+"\nnumero: "+n);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

                }
    }

必须更改的标签是lblNewLabel_1。

我想在每次迭代中更改它。

1 个答案:

答案 0 :(得分:1)

查看Oracle的Concurency In Swing教程。

夫妻关键点

  1. 不建议从EDT以外的任何线程访问javax.swing.*中的类。
  2. 使用javax.swing.SwingWorker(Java 1.3及更高版本)或java.awt.SecondaryLoop(Java 7及更高版本)执行需要更新UI或与UI交互的长时间运行任务。 javax.swing.Timer可用于在将来启动事件,但通常不应用于任何长时间运行的任务。
  3. 编辑正如评论中所提到的,您不应该阻止EDT。