私のアプリケーション内でこの問題を解決する方法に関するヘルプ/ガイダンスを探しています。さまざまなWebサイトでいくつかのフォーラム投稿を読んだ後、私はなぜこれがうまくいかないのか考えていると思いますが、なぜ私のアプリケーションでこれが起こるのか、そしてソリューションを実装する方法が不明です。処理中にJava、KeyPressed()が検出されない
keyPressed()関数を介してキーボードからユーザーからの応答を受け取るまでアプリケーションが待機するのを探します。私はアプリケーションをいくつかの関数(ここでは示されていないもの)に分け、runTrialEvent()のwhileループで応答を待っています。しかし、runTrialEvent()関数を実行すると、応答は取得されません。私はこれがどこにあるのか知っていますが、理由を完全に理解していません。
私は、キーボードで 't'を押すことによって実行されるrunTrialEvent()という関数に次のコードを持っています。
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()と他の関数を受け取ってrunTrialEvent()に渡すことができますが、この関数の実行中にkeyPressed入力を検出できないので、Arduinoとの入力を完全に処理する他の関数を混乱させます。 ? – user3212628
@ user3212628あなたが切断されたスニペットの代わりに小さい[mcve]を投稿すると、あなたはもっと良い運を得られるでしょう(しかし、**これはあなたの完全なスケッチではありません)。しかし、基本的な考え方は何であろうと同じです。ビジー待機と 'delay()'を呼び出すことで、他の関数が起動する機会はありません。 –
こんにちは、固体の説明、形式の謝罪は、人々が理解するのを助けるためにできるだけ多くの情報を含めるだけでなく、あまりにも多くのことの否定的な影響があります。あなたが記述した解決策に関しては、私のアプリケーションでどうやってやっていくのか。私はタイマーがなくなる前にユーザーの応答を受け取る必要があります、なぜ私はwhileループを使用したかについての私の推論。私は別のスレッドを作成せずにそれについて行くだろうどのようなアイデア? – user3212628