سؤال

لذلك واجهت مشكلة اليوم أثناء العمل على برنامج Android الخاص بي. لدي فئة تتحول إلى أن سلسلة XML في كائن Java (طرف ثالث) ويعمل بشكل جيد في مشروع Java العادي ولكن على Android أحصل على هذا الخطأ الغريب:

06-21 22:44:26.402: DEBUG/App(259): java.lang.ClassNotFoundException: com.package.mycode.Class in loader dalvik.system.PathClassLoader@4001b500
06-21 22:44:26.402: DEBUG/App(259):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)

أخفي اسم طلبي وحزمةي لأسباب واضحة ، لكنني كنت أتساءل عما إذا كان أي شخص قد واجه مشاكل مثل هذه. الفصل في الحزمة الصحيحة ، وهي مكتبة أضفتها. فصول أخرى أشير إليها من قبل هناك ويمكن أن تصنع تلك. هل هناك أي أسباب أخرى ClassNotFoundException هذا خطئ؟

شكرا يا جيك

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

المحلول

private static void fixClassLoaderIssue()
{
    ClassLoader myClassLoader = MyClass.class.getClassLoader();
    Thread.currentThread().setContextClassLoader(myClassLoader);
}

هذا هو الكود الذي لدي حاليًا وأعتقد أنه تم إصلاح هذه المشكلة. MyClass هو مجرد فصل لدي في مشروعي. كما قلت ، أظهر لي أحد المشاركين ، لكن يبدو أنه مستقيم إلى الأمام.

نصائح أخرى

هل هناك أي أسباب أخرى يتم إلقاء ClassNotFoundException؟

IIRC ، يمكن أيضًا إلقاؤها إذا لم يتم تحميل بعض الفصول الأخرى في التبعيات الثابتة لـ "com.package.mycode.class" ، أو إذا كانت هناك مشكلة أثناء التهيئة الثابتة. ولكن يجب أن تظهر هذه استثناء متداخل ... في المرة الأولى التي تحاول فيها تحميل الفصل.

لا يحتوي Android على جميع فئات Java المتاحة على جهاز عادي. هناك بعض الفئات المفقودة التي يمكن أن تسبب هذا الخطأ. ولكن يجب أن يتم عرض هذا بالفعل في وقت الترجمة. انظر إلى هذا قائمة لمعرفة الفصول التي يتم دعمها والتي لا يتم دعمها.

مرة أخرى ، أنا أخمن فقط لأن المترجم يجب أن يرى الفصول المفقودة.

لتطبيق Android ، كنت سأشكل نفس المشكلة مع ملف جرة خارجي. في حالتي ، كان الحل هو نقل الجرة من مجلد "lib" إلى مجلد Android الافتراضي "Libs".

عندما كانت الجرة في مجلد LIB (تمت إضافتها إلى Build Path أيضًا) ، في حين لم تكن هناك مشكلة في البناء في Eclipse ، فإن التطبيق كان يعطي ClassNotFoundException في وقت التشغيل. بمجرد أن نقلت الجرة إلى مجلد "Libs" ، بدأت الجرة تظهر تحت "Tropencies Android" وبدأ التطبيق في العمل بشكل جيد.

هذه بعض المناقشات الأخرى حول نفس الموضوع.

إضافة مكتبة/جرة إلى مشروع Android Eclipse

Android: ما هو اسم مجلد ملفات JAR (lib أو libs)؟

كيفية تحديد مجلد LIB للجرار عند استخدام ملف إنشاء Antroid الذي تم إنشاؤه بواسطة Android؟

واجهت مشكلة في بدء تشغيل Aynctask. كان يعمل على ما يرام ولكن بعد ذلك أضفت

line = StringEscapeUtils.unescapeHtml4(line);

(مكتبة commons.apache.org) إلى Asynctask ثم الكثير من المشاكل. إنه يجمع بشكل جيد ولكن عندما حاولت الجري ، قال إن الفصل غير موجود في صف Asynctask. لكنني واصلت استئنافها استمرت في مهمة Async ، ثم مات.

لذلك أعتقد أن المشكلة هي أن stringescapeutils لم يتم تثبيته بشكل صحيح ، لكن لم يكن لدي أي طريقة لمعرفة ذلك من رسائل الخطأ التي كنت أحصل عليها.

هل هناك أي أسباب أخرى يتم إلقاء ClassNotFoundException؟

في حالتي ، حصلت على classnotfoundException لنشاطي الرئيسي عند بناء APK باستخدام Eclipse لكن لم يكن لدي أي مشكلة عند البناء مع Maven.

كانت المشكلة أن نشاطي الرئيسي هو تنفيذ واجهة من مشروع Java عادي "مكتبة Pojo". في مشروع Android> Properties> java build path> order and orport اضطررت إلى وضع علامة على المربع لتصدير "مكتبة Pojo". بعد تنظيف المشروع ، تم تضمين الواجهة في الفئات. dex في APK وتم حل المشكلة.

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

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