לא ניתן היה למצוא או לטעון שגיאת מחלקה ראשית

1. הקדמה

מדי פעם כאשר אנו מריצים תוכנית Java, אנו עשויים לראות "לא הצלחנו למצוא או לטעון מחלקה ראשית". קל לנחש את הסיבה: ה- JVM לא הצליח למצוא את המעמד הראשי ונתן את השגיאה הזו. אבל למה זה לא יכול?

במדריך זה נדון בסיבות האפשריות לאי איתור המחלקה הראשית. כמו כן, נראה כיצד לתקן אותם.

2. תוכנית לדוגמא

נתחיל עם שלום עולם תכנית:

מחלקה ציבורית HelloWorld {public static void main (String [] args) {System.out.println ("שלום עולם .. !!!"); }}

עכשיו, בואו נרכיב את זה:

$ javac HelloWorld.java

כאן המהדר ייצור .מעמד קובץ לתוכנית שלנו. זֶה .מעמד קובץ ייווצר באותה ספרייה. ה .מעמד לקובץ יהיה שם זהה לשם המחלקה שניתן בתוכנית Java. זֶה .מעמד ניתן להפעיל את הקובץ.

בסעיפים הבאים נפעיל זאת .מעמד הקובץ ונסה להבין את הסיבות האפשריות לשגיאה "לא ניתן היה למצוא או לטעון מחלקה ראשית".

3. שם כיתה שגוי

להפעיל א .מעמד קובץ שנוצר על ידי מהדר Java, נוכל להשתמש בפקודה הבאה:

ג'אווה 

עכשיו, בואו נפעיל את התוכנית שלנו:

$ java helloworld שגיאה: לא ניתן היה למצוא או לטעון helloworld בכיתה הראשית

כן, זה נכשל עם השגיאה "לא ניתן היה למצוא או לטעון את המעמד הראשי helloworld".

כפי שנדון קודם, המהדר יפיק את .מעמד קובץ עם אותו שם בדיוק שניתן לשיעור Java בתוכנית. אז במקרה שלנו, המעמד הראשי יקבל את השם שלום עולם, לא שלום עולם.

בואו ננסה עוד ניסיון עם מעטפת נכונה:

$ java HelloWorld שלום עולם .. !!!

הפעם זה רץ בהצלחה.

3.1. סיומת קובץ

כדי להרכיב תוכנית Java עלינו לספק את שם הקובץ עם הסיומת שלו (.ג'אווה):

$ javac HelloWorld.java

אבל לנהל א.מעמד אנחנו צריכים לספק את שם הכיתה ולא את שם הקובץ. אז אין צורך לספק את .מעמד סיומת:

$ java HelloWorld.class שגיאה: לא ניתן היה למצוא או לטעון את המחלקה הראשית HelloWorld.class

אז שוב, בואו נפעיל את התוכנית שלנו בעזרת שם הכיתה הנכון:

$ java HelloWorld שלום עולם .. !!!

4. שמות חבילות Java

בג'אווה אנו שומרים שיעורים דומים ביחד במה שאנו מכנים חֲבִילָה.

בוא נזוז שלום עולם בכיתה אל com.baeldung חֲבִילָה:

חבילה com.baeldung; מחלקה ציבורית HelloWorld {public static void main (String [] args) {System.out.println ("שלום עולם .. !!!"); }}

עכשיו, בואו נרכיב ונריץ את המעודכן שלום עולם תוכנית כמו קודם:

$ java HelloWorld שגיאה: לא ניתן היה למצוא או לטעון את המחלקה הראשית HelloWorld

אך שוב אנו מקבלים את השגיאה "לא הצלחנו למצוא או לטעון את המחלקה הראשית HelloWorld"!

בואו ננסה להבין מה פספסנו כאן.

כדי להריץ מחלקת Java שנמצאת בחבילה, עלינו לספק את שמה המלא. אז במקרה שלנו, HelloWorld's שם מוסמך לחלוטין הוא com.baeldung.HelloWorld.

עכשיו, כשיצרנו com.baeldung חבילה, למעשה יצרנו מבנה תיקיות כמו:

com / baeldung / HelloWorld.java

ראשית, בואו ננסה להפעיל את התוכנית שלנו מה- com / baeldung מַדרִיך:

$ java com.baeldung.HelloWorld שגיאה: לא ניתן היה למצוא או לטעון com.baeldung.HelloWorld בכיתה הראשית

ובכל זאת, איננו מסוגלים להריץ את התוכנית שלנו.

כאן, כאשר ציינו את שם הכיתה המלא com.baeldung.HelloWorld, ג'אווה ניסתה למצוא את קובץ HelloWorld.class ב com / baeldung, תחת הספריה שממנה הפעלנו את התוכנית.

כמו שכבר היינו בפנים com / baeldung, Java לא הצליחה למצוא ולהפעיל את שלום עולם תכנית.

עכשיו, בואו נחזור לתיקיית האב ונפעיל אותה:

$ java com.baeldung.HelloWorld שלום עולם .. !!!

כן, אנו מסוגלים שוב לומר "שלום" לעולם.

5. מסלול כיתה לא חוקי

לפני שנמשיך, בואו קודם להבין מהו מסלול הכיתה - זה מערך השיעורים העומד לרשות ה- JVM הפועל כרגע.

אנו משתמשים במשתנה classpath כדי לומר ל- JVM היכן למצוא את ה- .מעמד קבצים במערכת הקבצים.

תוך כדי הפעלת תוכנית אנו יכולים לספק את מסלול הכיתה באמצעות מסלול קלאסי אוֹפְּצִיָה. דוגמא:

java -classpath / my_programs / compiled_classes HelloWorld

כאן, ג'אווה תחפש HelloWorld.class קובץ ב- /תוכניות / מחלקות_המורכבות שלי תיקיה, תיקייה שאת הרגע המציאנו את שמה. כברירת מחדל, המשתנה classpath מוגדר ל ".", כלומר הספריה הנוכחית.

בחלק לעיל שינינו את הספרייה שלנו כדי להפעיל את התוכנית שלנו. אבל מה אם נרצה להריץ אותו מתיקיה אחרת? אז המשתנה של מסלול הכיתה עוזר לנו.

להפעיל את התוכנית שלנו מהספריה היא com / baeldung אנו יכולים פשוט לקבוע כי מסלול הכיתה שלנו עולה בשני ספריות - אחת לכל חלק חבילה:

$ java -claspath ../../ com.baeldung.HelloWorld שלום עולם .. !!!

כאן, ".." מייצג את ספריית האב. במקרה שלנו "../../" מייצג את החלק העליון של היררכיית החבילות שלנו.

6. מסקנה

במדריך זה למדנו את הסיבות האפשריות לשגיאה "לא הצלחנו למצוא או לטעון מחלקה ראשית".

ואז, כמובן, למדנו גם כיצד לפתור שגיאה זו.