أفضل طريقة لاكتشاف ما إذا كان الكود قيد التشغيل في خادم التطبيقات Java

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

  •  06-07-2019
  •  | 
  •  

سؤال

بالنسبة لفاصوليا J2EE، أقوم بإعادة استخدام التعليمات البرمجية التي تم تطويرها لتطبيق Java Swing.JOptionPane.showMessageDialog() شائع الاستخدام للأسف.لحسن الحظ، توجد معظم الحالات في أقسام التعليمات البرمجية التي لا يتم إعادة استخدامها بواسطة تطبيق J2EE، ولكن في بعض الحالات تحتوي المستويات الأدنى من التعليمات البرمجية على مثيلات JOptionPane.showMessageDialog().من الواضح أن هذا يؤدي إلى ظهور مربعات حوار على الخادم، وهو ما أريد تجنبه.

كخطوة أولى، أود أن أؤكد بطريقة أو بأخرى أنه لن تظهر أي مربعات حوار على الخادم.

اقترح أحدهم إلقاء نظرة خاطفة على حدث ما أو قائمة انتظار الطلاء (لا أتذكر أي منهما):ممكن حدوثه:

// old code: JOptionPane.showMessageDialog(msg);
if ( someEventQueue.size() == 0 ) // <== consider this pseudo-code
  Log.log(msg); // I am running on a server. Tell the log.
else
  JOptionPane.showMessageDialog(msg); // I have a user made of meat. Tell him!

أبدا لست حقًا حصلت على هذا العمل.ماذا كنت ستفعل؟

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

المحلول

وتأكد من بدء تشغيل الملقم مع

java -Djava.awt.headless=true

ويجب أن تبدأ معظم خوادم بهذه الطريقة افتراضيا. ثم يمكنك التحقق:

boolean headless_check = GraphicsEnvironment.isHeadless();

ومزيد من التفاصيل حول مقطوعة الرأس متاح href="http://www.oracle.com/technetwork/articles/javase/headless-136834.html" هنا :

نصائح أخرى

لقد اختبرت ذلك للتو باستخدام OpenJDK Runtime Environment (IcedTea 2.4.3) (Gentoo build 1.7.0_45-b31) على Linux، ووجدت ذلك unset DISPLAY كان أيضًا كافيًا للقيام به isHeadless()isHeadlessInstance()) يعود true.

لذلك، لا تخبرك هذه الطريقة فقط ما إذا كانت AWT قد اضطرت إلى تجاهل قدرات الرسومات الخاصة بالنظام، بل تخبرك ما إذا كانت العملية الخاصة بك تتمتع بإمكانية الوصول إلى قدرات الرسومات على الإطلاق.

مثال:
يتم تشغيل الرمز على بعض الصناديق التي لا تحتوي على بطاقة عرض (ربما هذا ما تريد معرفته) حتى تتمكن دائمًا من التحقق من خاصية النظام إذا كنت تريد معرفة ما إذا كان وضع مقطوعة الرأس موجودًا لسبب ما قسري.

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