في Java ، ما هي أفضل طريقة لالتقاط ضغط مفتاح ؟

StackOverflow https://stackoverflow.com/questions/4608854

  •  25-09-2019
  •  | 
  •  

سؤال

أواجه مشكلة في التقاطu003Ctab> ضغط المفاتيح في تطبيق سطر الأوامر Java الخاص بي. باستخدام System.in.Read () لا يبدو أنني أحصل على أي شيء عند الضغط على مفتاح TAB. ما هي أفضل طريقة لمعالجة هذا؟

لإعطاء بعض السياق ، أحاول السماح للمستخدم بالضغط على مفتاح Tab Mid-Command لجعله إكمالًا تلقائيًا (مثلما قد تفعل ذلك في قذيفة باش). أنا منفتح على الاقتراحات إذا كانت هناك أساليب أفضل لتحقيق ذلك (ربما استخدام System.in.Read () ليست أفضل زاوية للتعامل مع هذا؟).

هل كانت مفيدة؟

المحلول

القي نظرة على جلين. لم أستخدمها بنفسي. يستخدم Windows DLL (باستخدام JNI) ولديه دعم Linux لتبديل وحدة التحكم إلى وضع الحرف/RAW بدلاً من الوضع المخزن المؤقت. لم أستخدم هذا من قبل ، لذا استخدم على مسؤوليتك الخاصة. أنا أيضًا لست متأكدًا بنسبة 100 ٪ إذا كانت ستتناول مشكلتك ، ولكنها تستحق اللقطة :)

تعديل: يمكنني تأكيد أنه يعمل

ConsoleReader cr = new ConsoleReader();
while (cr.readVirtualKey() != 0x09){
  //loop till Tab is pressed
}

تحرير مرة أخرى: تحتوي المكتبة على الإكمال التلقائي (بالضغط على علامة التبويب) لخط الأوامر ... استمتع :)

نصائح أخرى

أظن أن قذيفة الخاص بك تلتقط علامة التبويب ومنعها من الوصول إلى التطبيق الخاص بك. قد لا يكون هناك أي شيء يمكنك القيام به حيال ذلك ...

يتم توفير البيانات من InputStream فقط عند الضغط على المستخدم Enter. أعتقد أنك ستجد أنه إذا قمت بالضغط على Enter After Tab ، فستظهر علامة التبويب.

في تطبيقات C ، هناك شيء مشابه: تقوم القشرة بتعيين وضع الإدخال على RAW من المطبوخ ، لأنه يحتاج إلى ضربات مفاتيح خام. ReadLine هي المكتبة العادية المستخدمة لهذا في Linux. لست متأكدًا من ما هو شائع في Windows. بقدر ما أستطيع أن أفكر ، فإن شيئًا ما يستخدم JNI هو الخيار الوحيد هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top