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

标签 java iterator label jdialog

我对此有疑问。

我正在做一个简单的游戏,用 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。

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

最佳答案

看看Concurency In Swing来自 Oracle 的教程。

几个关键点

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

编辑 正如评论中提到的,您不应阻止 EDT。

关于迭代器停止后,Java 不会更改接口(interface)上的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536006/

相关文章:

java - Quartz 调度程序与设置 cron

java - 如何从十六进制值创建 byte[]?

java - 如何将值(数组或数组列表)从一个 Pane 传递到另一个 Pane ?

java - JSF 生命周期(验证)

ruby - Ruby中的高阶迭代器?

c++ - 是否可以确定传递的迭代器是否属于关联标准容器?

iOS核心剧情: Adjust y axis padding to label size

python - Python中迭代器的最后N个元素以外的所有元素

drracket 中的标签、goto 命令

html - 如何使用xpath在任意位置找到一个label属性