尋求一些關於如何在我的應用程序中解決這個問題的幫助/指導。在閱讀各種網站上的幾篇論壇帖子之後,我想我有一個關於爲什麼這不起作用的想法,但我不確定爲什麼在我的應用程序中發生這種情況以及如何實施解決方案。處理:Java,KeyPressed()沒有檢測到運行函數?
尋找應用程序,等待用戶通過鍵盤通過keyPressed()函數接收到響應。我將應用程序分離爲幾個函數(有些未在此處顯示),並且正在等待runTrialEvent()中的while循環中的響應。但是,一旦我運行runTrialEvent()函數,響應永遠不會被拾取。我知道這是問題所在,但不完全明白原因。
我在一個名爲runTrialEvent()的函數中有下面的代碼,它是通過按下鍵盤上的't'運行的。
runTrialEvent()
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()之前的循環細其中工程輸入。此代碼是:
的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 ");
}
}
我的平局()僅僅是一個窗口上寫的文字,所以沒有什麼是運行在那裏。如果任何人有任何解決方案將是偉大的。任何解釋爲什麼發生這種情況將不勝感激。
謝謝!
嗨,感謝您的回覆,現在就多瞭解一下。只是爲了澄清,很大一部分代碼並未包含在內。我有一個serialEvent()和其他函數可以完美地處理Arduino的輸入,這讓我很困惑,因爲我可以在另一個函數中接收它並將它傳遞給runTrialEvent(),但在此函數運行期間無法檢測keyPressed輸入? – user3212628
@ user3212628如果您發佈一個小[mcve]而不是斷開連接的片段(但請注意,這應該不是**完整草圖),您將擁有更好的運氣。但是無論如何,基本思想都是一樣的:如果你將一個函數與忙等待並調用'delay()',你的其他函數將沒有機會觸發。 –
嗨,很好的解釋,爲格式道歉,希望包括儘可能多的信息,以幫助人們理解,但也有負面影響太多。就你所描述的解決方案而言,我可以怎樣去做我的應用程序。我必須在定時器用完之前收到用戶的響應,我的理由是爲什麼我使用了一個while循環。任何想法如何我會去創建另一個線程? – user3212628