ما الذي سيؤدي إلى nullpointerException عند تشغيل جرة من سطر الأوامر، ولكن ليس من IDE؟

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

  •  16-09-2019
  •  | 
  •  

سؤال

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

يتم إلقاء nullpointerexception في السؤال من جرة تابعة لجهة خارجية تجميعها من المصدر. ولكن، أشك في أن المشكلة - وهي تعمل عندما أعرضها داخل الكسوف!

ما الذي يمكن أن يسبب هذا وكيف يمكنني العودة حول عزل المشكلة وتصحيحه؟

هنا الكثير من تتبع المكدس حيث يمكنني عرض:

java.lang.NullPointerException
        at java.io.FilterInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.fill(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        at java.io.DataInputStream.readUnsignedByte(Unknown Source)
        at com.jhlabs.dbf.DBFFile.readHeader(DBFFile.java:129)
        at com.jhlabs.dbf.DBFFile.<init>(DBFFile.java:76)
        at com.jhlabs.map.shapefile.Shapefile.<init>(Shapefile.java:102)
        at com.jhlabs.map.layer.ShapefileLayer.<init>(ShapefileLayer.java:62)

راجعت ClassPath - جرة الطرف الثالث في الواقع على ClassPath. ومع ذلك، كنت أتوقع ذلك، كما أحيل على الأرجح الحصول على NoclassdeffoundException إذا لم يكن الأمر كذلك وحاولت استخدام الفصول في الجرة.

لقد راجعت أيضا المواقع التي استخدمتها كصدا، وكانت ليست فارغة وتم تحميل الملفات المناسبة بشكل صحيح.

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

المحلول

تخمين المرء: يحاول العثور على مورد باستخدام ClassLoader.getResourceAsStream() أو ما شابه ذلك، ولا يجدها في الجرة.

بطبيعة الحال، سنكون تخمين أقل ما إذا كنت تخبرنا بقية تتبع المكدس بدلا من أنها مجرد NPE ... وحقيقة أنك حصلت على المصدر يعني أنه يجب أن تكون قادرا على العمل بالضبط حيث تسير الخطأ!

تحرير: نعم، مع هذا التتبع المكدس، ربما يخلق FilterInputStream لكن تمر null تيار لف. (يجب أن يرمي JDK استثناء في المنشئ، لكنه فات الأوان لإصلاح ذلك الآن.)

نصائح أخرى

يبدو أكثر مثل مسار ملف DBF غير حل بشكل صحيح في الحالة الأخيرة. يختلف مسار الملف من حيث تقوم بتشغيل ملف الفصل الخاص بك في الكسوف في الغالب عن المكان الذي تقوم بتشغيل ملف دفعي منه. (ليس مسار الفصل، ولكن المسار المادي من المكان الذي تقوم به Java -jar ...، مثل القول، D: My App Bin) يتم تشغيل Eclipse المسار موجود في تكوينات التشغيل -> علامة تبويب الوسائط -> مجال عمل الدليل.

يجب أن تتعلم كيفية إرفاق مصحح الأخطاء في برنامج مستقل، حتى تتمكن من إرفاق IDE الخاص بك مع المصدر لهذا البرنامج قيد التشغيل. أوافق على Jon Skeet أن هذا على الأرجح ملف غير موجود - حاول تغيير التيار الخاص بك مباشرة لتكوين التشغيل الخاص بك لمعرفة ما إذا كان يكسر في ذلك الوقت.

هل أنت متأكد من أن جرة الطرف الثالث في طريقك عند تشغيله من سطر الأوامر؟

حاول تشغيله على JDK وليس على JRE، بهذه الطريقة سترى على الخط الذي تتلقىه NullPointerException، ومعرفة ما يجب القيام به من خلال النظر إلى المصدر.

أيضا، تجميعها مع تمكين معلومات التصحيح (لا تتذكر كيف، انظر دليل المهام Ant Javac).

أعتقد أن ClassPath في مهمة Eclipse المدى الخاصة بك و ClassPath في النهج اليدوي الخاص بك مختلفة. انتقل إلى مربع حوار تشغيل التكوينات وتحقق من علامة التبويب ClassPath الخاصة بمهمة تشغيل Eclipse الخاصة بك وتأكد من أن الدفعة لديك تحتوي على نفس الإدخالات.

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