سؤال

كيف يمكنني تقاطع كنترول+ج (ما الذي عادة ما يقتل العملية) في تطبيق Java CLI (واجهة أوامر)؟

هل يوجد حل متعدد المنصات (Linux، Solaris، Windows)؟

أنا استخدم ConsolereadLine(), ، ولكن إذا لزم الأمر ، يمكنني استخدام طريقة أخرى لقراءة الأحرف من الإدخال القياسي.

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

المحلول

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

يجب أن يكون هذا قادرًا على اعتراض الإشارة، ولكن فقط كخطوة وسيطة قبل أن يتم إيقاف تشغيل JVM بالكامل، لذلك قد لا يكون هذا هو ما تبحث عنه.

تحتاج إلى استخدام أ SignalHandler (sun.misc.SignalHandler) لاعتراض SIGINT إشارة أثارها أ كنترول+ج (على يونكس وكذلك على ويندوز).
يرى هذا المقال (pdf، الصفحة 8 و 9).

نصائح أخرى

وأنا على افتراض انك تريد اغلاق بأمان، وليس القيام ماس كهربائى عملية إيقاف التشغيل. إذا كان لي أن الافتراض هو الصحيح، ثم يجب أن ننظر في <لأ href = "http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread) "يختلط =" noreferrer "> إيقاف خطاف .

في أجل أن تكون قادرة على التعامل مع السيطرة + C دون اغلاق لسبب ما، سوف تحتاج إلى استخدام بعض شكل من أشكال التعامل مع إشارة (منذ السيطرة + لا يتم تمرير C المدخلات في الواقع مباشرة إلى التطبيق الخاص بك، ولكن بدلا من ذلك يتم التعامل من قبل نظام التشغيل الذي يولد SIGINT أن ثم يتم تمريرها إلى جافا.

http://www.oracle.com/technetwork/ جافا / javase / إشارات 139944.html للحصول على تفاصيل حول معالجة الإشارات.

و(إذا كنت مجرد الرغبة في برشاقة الاغلاق، والجواب AKF وتكفي).

وبعض الروابط حول كيفية التعامل مع SIGTERM - وهذا هو إشارة البرنامج هو الحصول على الجانب OS:

http://blog.webinf.info/2008/08/intercepting -sigterm.html

HTTP: //java.sun كوم / javase / 6 / webnotes / مشكلة / TSG-VM / أتش تي أم أل / signals.html

http://www.ibm.com/developerworks/java/ مكتبة / ط signalhandling /

وينبغي أن تعمل على أنظمة التشغيل POSIX - وهذا هو، ماك ويونيكس يجب أن تعمل على ويندوز لست متأكدا، أتذكر أنني سمعت أنه POSIX أيضا متوافقة إلى حد ما، ولكن قد varty كثيرا مع إصدارات مختلفة <. / P>

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