[英]Where should I use thread.sleep in a java swing program?
现在,我已经编写了一种在Swing程序中使用的方法,该方法应该减慢调用它的方法的运行速度(通过thread.sleep(x)),而不是减慢它只是导致刷新的速度在方法执行结束时,整个程序将挂起并刷新屏幕。
这是我的代码:
public final void doBubbleSort(String numbers[], JButton numButton[]){
for (int k = 0; k < numbers.length - 1; k++){
String str1 = "";
boolean isSorted = true;
for (int i = 1; i < numbers.length - k; i++){
if (Integer.parseInt(numbers[i]) < Integer.parseInt(numbers[i - 1]) ){
try{
String tempVariable = numbers[i];
numbers[i] = numbers[i - 1];
numbers[i - 1] = tempVariable;
isSorted = false;
str1 = numButton[i].getText();
numButton[i].setText(numButton[i-1].getText());
Thread.sleep(100);
}catch(Exception e){ System.err.println("Error: " +e.getMessage()); }
numButton[i-1].setText(str1);
}
}
if (isSorted)
break;
}
}
如果有人可以告诉我应该在哪里放置thread.sleep()来延迟显示被交换的项目,我将不胜感激。
谢谢!
您不能通过在这样的事件处理程序中放入循环来进行动画处理。 您必须通过使用单独的线程(显式地)或使用javax.swing.Timer
类来执行此操作。 如果您正在循环操作并在事件线程上休眠,那么在循环运行的整个过程中,事件线程将无法执行其其他任务,例如绘制屏幕。
有关使用Swing计时器类的信息,请参见本文 。
您永远不要在事件分发线程中入睡。
Thread.sleep
) 您可能想看看Timer
类(为定期执行操作提供更好的接口)或Swing Workers。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.