جافا: عرض تعطل في واجهة المستخدم الرسومية ، ولكن قمع التحذيرات
-
25-09-2019 - |
سؤال
بالنسبة لتطبيقات سطح المكتب ، من المفيد رؤية StackTrace على واجهة المستخدم الرسومية عند تعطل البرنامج. لقد قمت بتطبيق هذا في Java عن طريق استبدال System.err مع معالج الأخطاء الخاص بي ، والذي يعيد توجيه جميع رسائل الخطأ إلى مكون واجهة المستخدم الرسومية وملف نصي.
المشكلة: لا تكتب عدد قليل من المكتبات الموجودة (على سبيل المثال Apache POI) إلى النظام. عند حدوث تحطم ، فإنها تخرج أيضًا رسائل تحذير بسيطة. هذا يتسبب في ظهور نافذة تحطم النار دون داع. لذا فإن سؤالي هو ، هل يعرف أي شخص كيفية (1) إظهار StackTrace عندما يتعطل البرنامج ، بينما (2) لا يعرضه في حالة رسائل تحذير؟
تحرير] واجهة المستخدم الرسومية مكتوبة في SWT.
المحلول
يمكنك تثبيت معالجات الاستثناء الخاصة. تم شرح تقنية واحدة للتأرجح هنا: http://ruben42. إريك بيرك لديه أيضا مقالة لطيفة حول هذا الموضوع. تقنية عامة أخرى تستخدم Thread.setDefaultUncaughtExceptionHandler
, ، وهو ما يسمى عندما يموت مؤشر الترابط بسبب الاستثناء (وفقًا للتعليقات في المقالة الأولى المشار إليها ، لا يموت سلسلة Swing ، لذا فإن تعيين معالج الاستثناء غير المرغوب فيه لا يعمل مع Swing ، لكن مقالة Eric تستخدم هذه التقنية).
يمكن لمعالج الاستثناء الخاص بك بعد ذلك عرض الخطأ أو تسجيله أو القيام بأي شيء تريده ، دون الاهتمام بالشفرة الأخرى باستخدام تدفقات الإخراج/الخطأ القياسية.
نصائح أخرى
أعتقد أنك تقترب من المشكلة من الزاوية الخاطئة. يجب أن تبرز حوارًا عندما يكون هناك استثناءات ، وليس فقط عندما يكون هناك إخراج إلى النظام. System.ERR أشبه أداة التسجيل.
لجميع الاستثناءات التي تم فحصها ، يجب عليك التعامل معها حسب الحالة في الكود الخاص بك. إما أن يطفو على الحوار ، أو قم بتسجيلها ، أو تجاهلها (ولكن في هذه الحالة ، تأكد من أنه من الآمن حقًا القيام بذلك)
للقبض على أي استثناءات متبقية لم يتم التحقق منها ، يمكنك أن تفعل شيئًا كهذا: http://www.javaspecialists.eu/archive/issue081.html, للتأكد من أنك تحصل على هؤلاء.