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

השגיאה ' לא ניתן היה למצוא או לטעון מחלקה ראשית ' מתרחשת בעת שימוש בפקודה java בשורת הפקודה להפעלת תוכנית Java על ידי ציון שם המחלקה במסוף. הסיבה לכך שזה קורה בעיקר בגלל טעות התכנות של המשתמש בעת הצהרת הכיתה.

לא ניתן היה למצוא או לטעון מחלקה ראשית בשורת הפקודה של Java

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

מה גורם לשגיאה 'לא ניתן היה למצוא או לטעון מחלקה ראשית' ב- Java?

ההודעה 'לא הצלחנו למצוא או לטעון מחלקה ראשית' פירושה שהשלב הראשון של מנוע Java שמביא את הכיתה לביצוע נכשל. הפקודה java לא הצליח לאתר את הכיתה בבית בספרייה הנכונה.

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

מהו תחביר 'ג'אווה'?

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

התחביר הרגיל של הפקודה הוא בערך כך:

 ג'אווה [...] [...]

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

דוגמה לפקודה חוקית היא:

java -Xmx100m com.acme.example.ListAppuals קווין חצים ברט

הפקודה שלעיל תגרום לפקודת java לבצע את הפעולות הבאות:

  • הוא יחפש גרסה מקובצת של המחלקה ' com.acme.example.ListAppuals '.
  • לאחר החיפוש, הוא יטען את הכיתה.
  • לאחר מכן, כאשר הטעינה נטענת, ייעשה חיפוש בכיתה אחר שיטה 'ראשית' עם חתימה חוקית, מכניסים וסוג החזרה. מחלקה ראשית לדוגמא תהיה משהו כמו:
סטטי ציבורי ריק ריק (מחרוזת [])
  • השיטה תיקרא עם טיעונים 'קווין', 'חצים' ו'ברט 'כמחרוזת [].

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

פתרון 1: בדיקת טיעון שם הכיתה

הטעות הנפוצה ביותר שמשתמשים עושים היא שהם מספקים שם מחלקה שגוי כטיעון (או שם כיתה נכון הוא צורה שגויה). מכיוון שאנחנו מצהירים על פרמטרים בשורת הפקודה, סביר מאוד להעביר את טיעון שם הכיתה בצורה שגויה. כאן נפרט את כל התרחישים האפשריים שבהם אתה יכול לטעות.

  • כתיבת שם כיתה פשוט . אם אתה מצהיר על הכיתה בחבילה כגון 'com.acme.example', עליך להשתמש בשם הכיתה המלא כולל החבילה בפקודה Java.
java com.acme.example.ListAppuals

במקום

java ListAppuals
  • עליך להכריז על שם כיתה במקום להכריז על שם קובץ או שם נתיב. Java לא מביאה את הכיתה אם אתה מצהיר שם נתיב / שם קובץ. רשומות שגויות כוללות את הדברים הבאים:
java ListAppuals.class java com / acme / example / ListAppuals.class
  • יש לקחת בחשבון מעטפת . פקודות Java רגישות לאותיות רישיות ואם תטעה ולו אות אחת בלבד, לא תוכל לטעון את המחלקה הראשית. דוגמה לטעויות שגויות הן:
java com.acme.example.listappuals
  • אתה לא צריך להכריז על שם קובץ מקור . כמו שהוזכר קודם, עליך להכריז רק על הכיתה בפורמט הנכון של שם הכיתה. דוגמה לטעות היא:
java ListAppuals.java
  • שגיאה זו תתרחש גם אם אתה מבצע שגיאת הקלדה או שוכח לכתוב את שם הכיתה לחלוטין .

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

פתרון 2: בדיקת מסלול כיתה

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

C:> sdkTool-classpath classpath1; classpath2 ... C:> set CLASSPATH = classpath1; classpath2 ...

כדי לקבל יותר תובנה לגבי מסלול הכיתה, כדאי לבדוק את המסמכים הבאים.

תיעוד פקודות Java

קובע מסלול כיתה

פתרון 3: בודק את הספרייה

כשאתה מכריז על ספרייה כנתיב כיתה, זה תמיד יתאים לשורש מרחב השמות. לדוגמא אם "/ usr / local / acme / classes" נמצא על שביל הכיתה, ג'אווה תחפש מחלקה "com.acme.example.Appuals". זה יחפש כיתה עם שם הנתיב הבא:

/usr/local/acme/classes/com/acme/example/Appuals.class

אז למעשה, אם אתה שם את הכתובת הבאה בשביל הכיתה, ג'אווה לא תוכל למצוא את הכיתה:

/ usr / local / acme / שיעורים / com / acme / דוגמה

עליך לבדוק גם את ספריה המשנה שלך ולראות אם היא תואמת ל- FQN. אם שיעורי FQN שלך הם "com.acme.example.Appuals", אז Java תחפש "Appuals.class" בספריה "com / acme / example".

כדי לתת לך דוגמה, נניח שהתרחיש הבא:

  • הכיתה שאתה רוצה להפעיל היא: com.acme.example.Appuals
  • נתיב הקובץ המלא הוא: /usr/local/acme/classes/com/acme/example/Appuals.class
  • ספריית העבודה הנוכחית היא: / usr / local / Acme / כיתות / com / Acme / דוגמה /

ואז התרחישים הבאים יתקיימו:

# שגוי, יש צורך ב- FQN java Appuals # שגוי, אין תיקיית 'com / acme / example' בספריית העבודה הנוכחית java com.acme.example. Appuals # שגוי, בדומה לתרחיש שלמעלה java -classpath. com.acme.example.Appuals # OK; מסלול כיתה יחסי מוגדר java -classpath ../../ .. com.acme.example.Appuals # OK; מסלול כיתה מוחלט מוגדר java -classpath / usr / local / acme / classes com.acme.example.Appuals

הערה: שביל הכיתה צריך לכלול גם את כל שאר הכיתות (שאינן מערכת) להן זקוקים היישומים שלך.

פתרון 4: בדיקת חבילת כיתה

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