【发布时间】:2016-09-01 07:26:48
【问题描述】:
我试图在一段时间内限制用户与程序交互,但遗憾的是,没有成功。我尝试过使用Thread.sleep,但是一旦sleep 操作结束,用户的输入就会赶上并继续执行直到完成。
例如,如果我使用下面的代码,程序会像上面提到的那样运行:它会在提供的时间段(1,5 秒)内休眠,然后用户的操作会赶上(它会打印“等待后” 与Thread.sleep 处于活动状态时用户单击的次数一样多)。那么我将如何防止这种情况呢?任何建议将不胜感激。
public void mouseClicked(MouseEvent e) {
print();
}
public void print() {
System.out.println("After waiting.");
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
一种方法是保留要启用/禁用的组件/元素的列表。然后使用计时器。禁用列表中的所有内容,然后触发启用列表中所有内容的事件。
-
我认为你最好使用“glasshour”模式对话框。这是文档:docs.oracle.com/javase/tutorial/uiswing/misc/modality.html 这是相关的 SO QA:stackoverflow.com/questions/20269083/…
-
你的想法错了。您应该改变程序响应用户尝试交互的方式,而不是从字面上阻止用户向程序提供任何输入。也就是说,继续接受用户的输入,然后忽略输入,或者更好:提供某种反馈,意思是“是的,我能听到你的声音,但我忽略了你,因为我现在很忙。”
标签: java multithreading frame