جافا مدخلات لوحة المفاتيح تحليل في التطبيق وحدة التحكم
سؤال
ولقد بدأت للتو تعبث مع JLine لتحليل إدخال حرف في وضع وحدة التحكم. ويبدو أن تعمل بشكل جيد، ولكن أنا أتساءل:
هل هناك طريقة توصيل nonblocking في JLine لمعرفة إذا كانت الأحرف المتاحة؟ (أي مثل kbhit()
في نظام التشغيل Windows.)
وأعتقد أنني يمكن التفاف دائما مدخلات لوحة المفاتيح في موضوع خاص بها والتي ثم يقدم أحرف لوحة المفاتيح في طابور ذات ألوان للموضوع الرئيسي، ولكن الذي يبدو أنه ينبغي أن يكون لا لزوم له.
تعديل : في هذا الطابع من قبل حرف التوزيع. أنا لا تنوي استخدام واجهة المستخدم الرسومية. وInputStream المعتاد I / O في جاوة في وضع وحدة التحكم يتطلب منك اضغط على مفتاح Enter الأول (على سبيل المثال انها مخزنة المدخلات فقط). من فضلك لا تقل لي حرف من حرف الإدخال في وضع وحدة التحكم مستحيل في جاوة. الأمر ليس كذلك. JLine يفعل ذلك باستخدام واجهة المحمولة مع تنفيذ التي تعتمد على منصة.
<القوي> تحديث تحرير : لوكنت قادرا على الإختراق معا فئة المساعد للقيام منع I / O في ترابط عامل (باستخدام JLine لI / O، تحذير لكل شخصية: لديك ل تحليل على Ctrl-C نفسك!) وبعد ذلك التواصل عبر طابور متزامنة مع روتين isempty (). لما أفعله الآن هذا شيء طيب، ولكن أود حقا أن تعرف وسيلة جيدة للقيام بذلك في المستقبل.
المحلول
ويبدو أنك على الطريق الصحيح.
وأعتقد أن "الحق" وسيلة لتحقيق ذلك هي مؤشر ترابط عامل أن يصب كل حجب I / O في قائمة انتظار غير مؤمن. هافا نظرة على ConcurrentLinkedQueue أ > java.util. المتزامنة.
نصائح أخرى
ولا يمكنك استخدام وحدة تحكم للحصول على عدم عرقلة إدخال دون المكتبات المحلية.
وسيكون لديك لكتابة التطبيق سوينغ وكتابة <لأ href = "http://java.sun.com/javase/6/docs/api/java/awt/event/KeyListener.html" يختلط = "noreferrer نوفولو"> KeyListener
واقرأ هذا البرنامج التعليمي: http://java.sun.com/docs/books/ تعليمي / uiswing / الأحداث / keylistener.html