我对此有疑问。
我正在做一个简单的游戏,用 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 的教程。
几个关键点
- 不建议从 EDT 之外的任何线程访问
javax.swing.*
中的类。 - 使用 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/