0

いくつかのステップを実行するツールを作成しました1..nいくつかのステップはユーザーの操作を必要とします(System.inからの読み取り)他のステップは、いくつかの条件が満たされるか、ユーザーが何らかのキーを押すまでループします(ユーザーがキーを押したときにループが終了し、メインが次のステップに進む必要があります)

キーループの割り込みを提供するこれらのステップに対して私が行ったことは、System.inから読み取るスレッドを生成することです->キーが押された場合、このスレッドはステップを中断します。これは正常に機能しますが、ループ条件が満たされると、このキーリスナースレッドはSystem.inでブロックされるため、ユーザーの操作を必要とする次のステップが影響を受けます。

私のキーリスナースレッドの実行は基本的に次のとおりです。

new InputStreamReader(System.in).read() > 0;

もちろんどのブロックなので、これを修正する方法を探していました

4

1 に答える 1

0

そして、キーリスナースレッドを次のように変更すると、次のようになります。

try
{
InputStreamReader reader = new InputStreamReader(System.in);
while (!reader.ready()) { Thread.sleep(100); }
if (reader.read() > 0) { // interrupt this step and proceed to the next one }
}
catch (IOException e) { // do something }
catch (InterruptedException e) { // noone needs me anymore }

そして、ステップループの後、キーリスナースレッドはもう必要ないので、割り込みます。

だから、これは私にとってはうまくいきました、そして私はそのような問題の解決策を見つけられなかったので、将来の世代のためにここにそれを投稿したいと思いました:)

于 2012-07-17T11:32:19.163 に答える