0

我有这个问题。

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

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。

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

4

1 回答 1

1

查看 Oracle 的Concurency In Swing教程。

几个关键点

  1. javax.swing.*不建议从 EDT 以外的任何线程访问类。
  2. javax.swing.SwingWorker(Java 1.3 及更高版本)或java.awt.SecondaryLoop(Java 7 及更高版本)用于需要更新或与 UI 交互的长时间运行的任务。 javax.swing.Timer可用于在未来触发事件,但通常不应用于任何长时间运行的任务。

编辑如评论中所述,您不应阻止 EDT。

于 2013-08-30T15:08:41.437 回答