- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正在寻找有关如何在我的应用程序中解决此问题的一些帮助/指导。在阅读了各个网站上的几篇论坛帖子后,我想我知道为什么这不起作用,但我不确定为什么会在我的应用程序中发生这种情况以及如何实现解决方案。
寻找应用程序等待,直到通过 keyPressed() 函数通过键盘收到用户的响应。我已将应用程序分成几个函数(其中一些函数未显示),并在 runTrialEvent() 的 while 循环中等待响应。但是,一旦我运行 runTrialEvent() 函数,就永远不会收到响应。我知道这就是问题所在,但不完全理解原因。
我在名为 runTrialEvent() 的函数中有以下代码,该函数通过按键盘上的“t”来运行。
void runTrialEvent(Serial myPort)
{
//////////////////////////////////////////////
//This While Loop is where the issues arise
while (trialTimer.isFinished() == false && userResponded == false )
{
println("Awaiting User Response");
delay (300);
}
//////////////////////////////////////////////////
if (userResponded == true)
{
//Debug Info
println("User responded in time ");
}
else if (trialTimer.isFinished() == true)
{
println("User failed to respond in time ");
}
}
我使用 keyPressed() 来自用户的输入,它在循环正常之前工作。这段代码是:
void keyPressed()
{
if (key == 'f' || key == 'F' )
{
println("User Answered First");
//allTrials[i].setUserAnswer("F");
userResponded = true;
println("User Response Recorded ");
}
else if (key == 's' || key == 'S')
{
println("User Answered Second");
//allTrials[i].setUserAnswer("S");
userResponded = true;
println("User Response Recorded ");
}
}
我的draw()只是在窗口上写入文本,所以那里没有运行任何东西。如果有人有任何解决方案那就太好了。任何关于为什么会发生这种情况的解释将不胜感激。
谢谢!
最佳答案
处理使用单个线程来运行其所有功能。这意味着如果您让一个函数永远运行,其他函数将永远没有机会触发。
请尝试发布MCVE它以尽可能少的行数显示您的问题,同时足够完整,以便我们复制和粘贴以自行运行。这是一个显示您的问题的示例程序:
String text = "";
void draw(){
background(64);
textAlign(CENTER, CENTER);
text(text, width/2, height/2);
}
void keyPressed(){
text += key;
}
void mousePressed(){
while(!text.equals("hello")){
println("Waiting for text to equal hello.");
delay(1000);
}
}
这个程序正在做的事情与您正在尝试做的事情非常相似。它使用 keyPressed()
函数来处理输入,然后 mousePressed()
函数检查和 busy-waits 文本是否等于某些字符串。您可能期望这会忙等待,直到用户输入 hello。
如果您运行此函数,您会注意到 keyPressed()
函数工作正常,直到您单击鼠标。此时,它一直在等待文本等于 hello
,但这永远不会发生,因为现在 keyPressed()
函数永远不会触发。
(注意这个程序如何在没有任何额外代码且不需要 Arduino 或任何库的情况下显示您的问题。从现在开始,请尝试发布这样的代码。)
无论如何,我们如何解决这个问题?您可以创建第二个线程来处理您的处理,但这对于您的目的来说可能有点过分了。
相反,您需要重构代码以完全消除忙等待。一种方法是使用 boolean
变量来跟踪您是否已收到数据。使用它来检查您是否需要执行某些操作,然后在收到数据时进行设置。
这是我们的小示例程序中的方法:
String text = "";
boolean helloReceived = false;
void draw(){
background(64);
textAlign(CENTER, CENTER);
text(text, width/2, height/2);
}
void keyPressed(){
text += key;
if(text.equals("hello")){
helloReceived = true;
}
}
void mousePressed(){
if(helloReceived){
println("Text now equals hello!");
}
}
现在代码使用 helloReceived
变量来跟踪是否满足条件。这有点做作,但我正在尝试创建一个与您想要做的类似的示例。
此代码只是一个示例,您的实际代码可能需要比单个 boolean
值稍微复杂一些。但一般答案是相同的:您不应该忙等待或使用delay()函数,因为它会阻止其他函数被触发。相反,重构您的代码以完全消除等待。
关于java - 处理:Java,KeyPressed() 在运行函数时未检测到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45425141/
这是我的代码: $( '#Example' ).on( "keypress", function( keyEvent ) { if ( keyEvent.which != 44 ) {
自从我切换到 MAC 以来,我一直讨厌这样一个事实,即我必须使用 cmd+tab 的 alt 键来隐藏窗口。 我知道有一些应用程序(如 witch )可以替代 cmd+tab 功能,但我喜欢当前的界面
我希望在文本框上按键时运行一个函数,因此我有以下代码: $("input[x]").keypress(function() { DoX(); }) 这工作正常,但在我的函数中我
我有一个场景,我想通过进行 Http REST 调用来获取匹配的字符串,将每次击键时输入框中出现的字符串发送到服务器。但它没有按我的预期工作,例如,假设输入框中的当前值为“modul”,如果我在“mo
我刚刚开始使用 p5.js,我喜欢它的简单性,但有一点我无法掌握。 我设置了以下Fiddle : function Player(location, width, height, speed, wei
这里有两个类: public class Cls implements Runnable, KeyListener Thread t; Object obj; public Cls(Thing obj
我将一些程序从学校的计算机(Mac)传输到我的家用电脑。进入我的计算机后,我注意到按键现在在每个程序中都不起作用。我花了几个小时试图找出 KeyPressed 不起作用的原因。两台电脑都使用Eclip
我正在用java为自己制作一个俄罗斯方 block 克隆,作为一个学习项目。然而,我现在陷入了获取左右移动棋子的输入部分。我不确定问题是否出在我的方法中,或者问题出在未调用的 keyPressed 方
基本上我必须为一个项目使用 Processing(并非出于选择)并且遇到了关于一次按下多个键的问题。在 keyPressed() 函数中,我有多个条件,每个都将一个键映射到一个 Action 。这一切
目前我正在使用 jQuery,尤其是该函数 keypress() 这个函数可以告诉我很多关于按下哪个键、在哪里以及何时按下的信息。但什么时候是我的问题:所以这段代码... $(document).ke
我是 JavaScript 新手,在使用“keypress”事件时遇到问题;我目前正在做一个小的跳跃脚本测试,“keydown”和“keyup”事件都起作用,但“keypress”不起作用(我尝试在事
我试图在每次字段更改时执行一个函数。首先,我使用一个简单的 textarea 和一个 div: $("#stuff").keypress(function () { $(
嘿伙计们,可能是一个简单的问题,但在网上找不到任何东西。 我有一个包含搜索结果的列表,我希望能够使用向上和向下键在列表中导航。 if (e.keyCode == 40) { //down
我当前正在通过 .click 事件添加输入,然后想要监听此输入上发生的任何按键。但是,附加内容在插入后不会触发任何事件(即模糊、按键、焦点)。有没有人有什么建议?提前致谢! $("#recipient
我想知道是否可以在表单级别当表单中有控件时处理 KeyPress 事件。 当窗体上没有控件时我可以实现这一点,但是当我添加一些东西时,比如按钮,窗体失去焦点并且我无法将其返回,即使使用 Me.Focu
情况:表单有一个文本框,用户必须在其中键入一些文本。此文本框有一个 KeyPress 事件,在该事件中,窗体的文本属性更改为用户在每次击键时键入的文本。 这是文本框按键事件的代码: private
我正在开发一个应用程序并卡住了。我有一个普通的简单按钮。我想要做的是,如果我单击此按钮,它的行为就像您在软键盘上按空格键一样。 我该怎么做。一定有办法,因为您可以开发软键盘。 所以重复 xP 如果我按
在这个页面上: https://subnetipv4.com/ 如果您单击“IP 地址”列中的任何输入框,然后按“.”或“/”键(句点或斜杠),它会跳转到下一个输入框。 或者至少,它在桌面浏览器上是这
这段代码构建正确,一切似乎都有效,但 key 什么也没做。我认为要么是 Action 监听器,要么是椭圆没有更新。我正在尝试通过初学者 java 游戏编程。我确信这很容易,但我没有捕获它。如果这有所作
我在 jTable 中有一系列文本框和组合框。我使用框中的输入来过滤 JPQL 查询的结果,这些结果显示在 jTable 上。现在,想法是使该过程自动化,以便每次用户在框中键入一个字符时,应用程序都会
我是一名优秀的程序员,十分优秀!