Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何限制用户在一段时间内与程序交互?_Java_Multithreading_Frame - Fatal编程技术网

Java 如何限制用户在一段时间内与程序交互?

Java 如何限制用户在一段时间内与程序交互?,java,multithreading,frame,Java,Multithreading,Frame,我试图在一段时间内限制用户与程序交互,但遗憾的是,没有成功。我尝试过使用Thread.sleep,但只要sleep操作结束,用户的输入就会跟上并继续执行,直到完成为止 例如,如果我使用下面的代码,程序将按照上面提到的那样运行:它将在提供的时间段(1,5s)内休眠,然后用户的操作将跟上(它将在线程.sleep处于活动状态时打印用户单击的“等待”次数)。那么我该如何预防呢?如有任何建议,将不胜感激 public void mouseClicked(MouseEvent e) { pr

我试图在一段时间内限制用户与程序交互,但遗憾的是,没有成功。我尝试过使用
Thread.sleep
,但只要
sleep
操作结束,用户的输入就会跟上并继续执行,直到完成为止

例如,如果我使用下面的代码,程序将按照上面提到的那样运行:它将在提供的时间段(1,5s)内休眠,然后用户的操作将跟上(它将在
线程.sleep
处于活动状态时打印用户单击的“等待”次数)。那么我该如何预防呢?如有任何建议,将不胜感激

public void mouseClicked(MouseEvent e) {
        print();
    }

public void print() {
    System.out.println("After waiting.");
    try {
        Thread.sleep(1500);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

原因是
Thread.sleep()
将阻止UI线程。因此,通过第一次单击,您将获得一个输出,并且您的应用程序将存储在睡眠期间再次单击时发生的以下事件。然后,在GUI线程从休眠状态返回后,将释放事件,并执行一些打印提示,直到它休眠。因为


阻止UI线程不是一件小事。如果您想阻止用户输入,您应该禁用触发事件的按钮或节点,并在事件处理完成后启用它。

虽然我认为您是正确的,但我仍然不知道如何阻止用户输入。我正在创建一个游戏“爆炸点”的复制品(你是一个射出其他球的球。如果你错过了,你会死,如果你击中了它,你会得到一分,并在另一个时间产生同样的结果)。所以我想做的是,用户的点击不会被注册,球不会回到起始位置(他的Y坐标不会改变)。我该怎么做呢?单击(起始类)和(点类)获取代码。我想在这种情况下,我会尝试在点中使用布尔标志来解决这个问题。如果您首先触发了点,请将其设置为true或false,并阻止此操作的进一步操作。要允许进一步的用户操作,请确定将标志设置回true/false的点。我正在考虑这样做。我试试看。感谢您的帮助。一种方法是保留要启用/禁用的组件/元素的列表。然后使用计时器。禁用列表中的所有内容,然后触发事件以启用列表中的所有内容。我认为您最好使用“glasshour”模式对话框。这是文档:这是一个相关的问题,所以QA:你的想法是错误的。您应该改变程序响应用户尝试的交互的方式,而不是从字面上阻止用户向程序提供任何输入。也就是说,继续接受用户的输入,然后忽略输入,或者更好:提供某种反馈,这意味着,“是的,我能听到你,但我忽略你,因为我现在很忙。”