«Could not find or load main class» في Java: ماذا يفعل المبتدئ؟

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

«Could not find or load main class»: الخوف المألوف لكل مبتدئ في Java

\n\n

لقد بدأت للتو في تعلم Java، وكتبت أول برنامج HelloWorld.java، وبقلب يخفق ضغطت على Enter في الطرفية... وبدلاً من التحية المنتظرة رأيت رسالة باردة:

\n\n
Error: Could not find or load main class HelloWorld\nCaused by: java.lang.ClassNotFoundException: HelloWorld
\n\n

مألوف؟ إذا كان الأمر كذلك، فأنت لست وحدك. هذا السؤال على Stack Overflow حصد ملايين المشاهدات وهو الرقم القياسي المطلق بين أخطاء مبتدئي Java. الخبر السار: السبب دائمًا تقريبًا تافه، والحل يستغرق 30 ثانية. الخبر السيء: إذا لم تفهم لماذا حدث هذا، فسوف يطاردك الخطأ مرارًا وتكرارًا.

\n\n

في هذه المقالة، سنشرح جميع الأسباب المحتملة لظهور «Could not find or load main class» بأمثلة محددة. ستتعلم ليس فقط كيفية إصلاح الخطأ، بل فهم كيف تبحث Java عن الفئة الخاصة بك. هيا بنا!

\n\n

باختصار عن الشيء الرئيسي: ما الذي تحاول JVM قوله؟

\n\n

عندما تكتب java ClassName، تتلقى الآلة الافتراضية Java (JVM) أمرًا: «ابحث عن الفئة بهذا الاسم وقم بتشغيل طريقة main الخاصة بها». إذا لم تتمكن JVM من العثور على ملف .class بالاسم المطلوب أو لم تجد فيه طريقة main صحيحة، فإنها تصاب بالذعر وتصدر هذا الخطأ.

\n\n

من المهم أن تفهم: Java تعمل مع البايت كود (ملفات .class)، وليس مع المصادر (.java). أولاً، تقوم بترجمة .java إلى .class باستخدام الأمر javac، ثم تقوم بتشغيل .class باستخدام الأمر java. إذا حدث خطأ ما في الخطوة الثانية، فستحصل على الخطأ المنشود.

\n\n

السيناريو 1: نسيت ترجمة الملف

\n\n

السبب الأكثر شيوعًا، خاصةً لأولئك الذين فتحوا الطرفية للتو. تكتب:

\n\n
java HelloWorld
\n\n

ولكنك لم تقم بتنفيذ ما يلي قبل ذلك:

\n\n
javac HelloWorld.java
\n\n

بدون الترجمة، ملف HelloWorld.class ببساطة غير موجود. تحاول JVM بأمانة العثور عليه، لكنها لا تجده وتصدر الخطأ.

\n\n

كيف تتحقق؟

\n
    \n
  • انظر في المجلد الحالي: هل يوجد ملف HelloWorld.class؟
  • \n
  • إذا كان هناك فقط HelloWorld.java — قم بالترجمة.
  • \n
  • إذا لم يكن هناك أي منهما — تحقق مما إذا كنت في الدليل الصحيح.
  • \n
\n\n

السيناريو 2: خطأ إملائي في اسم الفئة (حالة الأحرف مهمة!)

\n\n

Java هي لغة ذات كتابة صارمة و حساسية لحالة الأحرف. إذا كانت فئتك تسمى HelloWorld، ولكنك تكتب:

\n\n
java helloworld\njava HelloWorld.class\njava HelloWorld.java
\n\n

— لن تفهمك JVM. يجب أن يتطابق اسم الفئة مع اسم الملف حرفًا بحرف. نعم، HelloWorld و helloworld هما اسمان مختلفان بالنسبة لـ JVM.

\n\n
\n 🔥 نصيحة سريعة: لا تكتب أبدًا .class أو .java في الأمر java. فقط اسم الفئة المجرد!\n
\n\n

السيناريو 3: مشاكل مع الحزمة (package) (أخطر فخ)

\n\n

بمجرد أن تبدأ في استخدام الحزم (package)، تتغير قواعد اللعبة. لنفترض أن لديك ملفًا:

\n\n
// الملف: src/com/pythonlib/MyApp.java\npackage com.pythonlib;\n\npublic class MyApp {\n    public static void main(String[] args) {\n        System.out.println("مرحبًا من PythonLib!");\n    }\n}
\n\n

كثير من المبتدئين يفعلون هذا:

\n\n
cd src\njavac com/pythonlib/MyApp.java   // الترجمة تنجح\njava MyApp                        // خطأ!
\n\n

لماذا؟ لأن الاسم الكامل للفئة الآن هو com.pythonlib.MyApp، وليس فقط MyApp. تبحث JVM عن الفئة بالاسم الكامل

المدونات

توصيات الكتب