Fix: Δεν βρέθηκε ή δεν φορτώθηκε η κύρια κλάση

Το σφάλμα ' Δεν βρέθηκε ή δεν φορτώθηκε η κύρια κλάση ' εμφανίζεται όταν χρησιμοποιείτε μια εντολή java στη γραμμή εντολών για να ξεκινήσετε ένα πρόγραμμα Java καθορίζοντας το όνομα κλάσης στο τερματικό. Ο λόγος για τον οποίο συμβαίνει αυτό οφείλεται κυρίως στο λάθος προγραμματισμού του χρήστη ενώ δηλώνει την τάξη.

Δεν ήταν δυνατή η εύρεση ή φόρτωση κύριας γραμμής εντολών Java

Όπως προαναφέρθηκε, αυτό το σφάλμα δεν σχετίζεται κυρίως με το σύστημα και ο χρήστης κάνει λάθος σε διάφορα σενάρια, όπως φαίνεται παρακάτω. Πριν προχωρήσουμε, υποθέτουμε ότι έχετε μια βασική γνώση της γλώσσας προγραμματισμού Java και πώς λειτουργεί.

Τι προκαλεί το σφάλμα 'Δεν βρέθηκε ή δεν φορτώθηκε η κύρια κλάση' στη Java;

Το μήνυμα 'Δεν ήταν δυνατή η εύρεση ή η φόρτωση της κύριας κλάσης' σημαίνει ότι το πρώτο βήμα της μηχανής Java για την ανάκτηση της κλάσης για εκτέλεση έχει αποτύχει. Η εντολή java δεν μπόρεσε να εντοπίσει την κλάση στον σωστό κατάλογο.

Σε ορισμένες περιπτώσεις, πρέπει να προσθέσετε τη σωστή διαδρομή αρχείου και να βάλετε το τερματικό Java στη σωστή θέση. Αφού εκτελείτε την εντολή από το τερματικό της γραμμής εντολών, ο υπολογιστής δεν γνωρίζει πού θα βρεθεί η κλάση ή πού βρίσκεται. Στους στοχευόμενους IDE, αυτό δεν είναι το πρόβλημα καθώς ο IDE διατηρεί ένα δείκτη που δείχνει προς τον τρέχοντα κατάλογο εργασίας.

Τι είναι η σύνταξη "java";

Πριν ξεκινήσουμε την αντιμετώπιση προβλημάτων γιατί το τερματικό μας επιστρέφει σφάλμα κατά την προσπάθεια εκτέλεσης, πρώτα πρέπει να δούμε τη σύνταξη της εντολής. Αν δεν χρησιμοποιείτε τη σωστή σύνταξη, θα αντιμετωπίσετε αυτό το σφάλμα αναπόφευκτα.

Η συνήθης σύνταξη της εντολής είναι κάτι σαν αυτό:

 java [...] [...] 

Εδώ είναι μια επιλογή γραμμής εντολών, είναι ένα πλήρως εξειδικευμένο όνομα κλάσης Java και είναι ένα επιχείρημα γραμμής εντολών που μεταβιβάζεται στην εφαρμογή σας όταν συντάσσεται ολόκληρο το πακέτο.

Ένα παράδειγμα έγκυρης εντολής είναι:

 java -Xmx100m com.acme.example.ListAppuals kevin arrows bart 

Η παραπάνω εντολή θα κάνει την εντολή java να εκτελέσει τις ακόλουθες λειτουργίες:

  • Θα αναζητήσει μια μεταγλωττισμένη έκδοση της κλάσης ' com.acme.example.ListAppuals '.
  • Μετά την αναζήτηση, θα φορτώσει την κλάση.
  • Στη συνέχεια, κατά την φόρτωση της κλάσης, η τάξη θα αναζητηθεί για μια 'κύρια' μέθοδο με έναν έγκυρο τύπο υπογραφής, τροποποιητή και επιστροφής. Ένα δείγμα κύριας τάξης θα ήταν κάτι σαν:
 δημόσιο static κενό κύρια (String []) 
  • Η μέθοδος θα καλείται με τα επιχειρήματα «kevin», «βέλη» και «bart» ως συμβολοσειρά [].

Πώς να διορθώσετε το 'Δεν βρέθηκε ή δεν φορτώθηκε η κύρια κλάση'

Λύση 1: Έλεγχος του όρου ονόματος κλάσης

Το πιο κοινό λάθος που κάνουν οι χρήστες είναι ότι παρέχουν ένα λανθασμένο όνομα κλάσης ως επιχείρημα (ή ένα σωστό όνομα κλάσης είναι λάθος μορφή). Δεδομένου ότι δηλώνουμε παραμέτρους στη γραμμή εντολών, είναι πολύ πιθανό να περάσετε το όρισμα του ονόματος κλάσης σε λάθος μορφή. Εδώ θα απαριθμήσουμε όλα τα πιθανά σενάρια όπου μπορείτε να κάνετε λάθος.

  • Γράφοντας ένα απλό όνομα κλάσης . Αν δηλώσετε την κλάση σε ένα πακέτο όπως το com.acme.example, πρέπει να χρησιμοποιήσετε το πλήρες όνομα της κλάσης, συμπεριλαμβανομένου του πακέτου, στην εντολή Java.
 java com.acme.example.ListAppuals 

αντί

 java ListAppuals 
  • Πρέπει να δηλώσετε ένα classname αντί να δηλώσετε ένα όνομα αρχείου ή ένα όνομα διαδρομής. Η Java δεν ανακτά την κλάση αν δηλώσετε ένα όνομα διαδρομής / όνομα αρχείου για αυτήν. Οι εσφαλμένες καταχωρίσεις περιλαμβάνουν τα εξής:
 java ListAppuals.class java com / acme / παράδειγμα / ListAppuals.class 
  • Θα πρέπει να λαμβάνεται υπόψη το περίβλημα . Στις εντολές Java γίνεται διάκριση πεζών-κεφαλαίων και αν κάνετε λάθος ακόμη και με ένα γράμμα, δεν θα μπορείτε να φορτώσετε την κύρια κλάση. Ένα παράδειγμα εσφαλμένων λαθών είναι:
 java com.acme.example.listappuals 
  • Δεν πρέπει να δηλώσετε όνομα αρχείου προέλευσης . Όπως προαναφέρθηκε, θα πρέπει να δηλώσετε μόνο την τάξη με τη σωστή μορφή full classname. Παράδειγμα λάθους είναι:
 java ListAppuals.java 
  • Αυτό το σφάλμα θα προκύψει και αν κάνετε λάθος στην πληκτρολόγηση ή ξεχάσετε να γράψετε πλήρως το όνομα της κλάσης .

Εάν κάνατε λάθη σφάλματος κατά τη δήλωση του classname, βεβαιωθείτε ότι το διορθώσατε και δοκιμάστε να ξεκινήσετε το πρόγραμμα.

Λύση 2: Έλεγχος της διαδρομής

Αν έχετε δηλώσει σωστά το όνομα της κλάσης αλλά εξακολουθείτε να εμφανίζεται το σφάλμα, οι πιθανότητες είναι ότι η εντολή java δεν θα μπορούσε να βρει το καθορισμένο όνομα κλάσης στη διαδρομή. Το classpath είναι μια διαδρομή στην οποία το runtime Java αναζητά αρχεία πόρου και κλάσης. Μπορείτε να ορίσετε εύκολα τη διαδρομή ταξινόμησης χρησιμοποιώντας δύο διαφορετικές εντολές όπως φαίνεται παρακάτω:

 C:> sdkTool -classpath classpath1; classpath2 ... C:> σύνολο CLASSPATH = classpath1; classpath2 ... 

Για να πάρετε περισσότερες πληροφορίες σχετικά με την ταξική πορεία, θα πρέπει να δείτε τα παρακάτω έγγραφα.

Τεκμηρίωση εντολών Java

Ρύθμιση διαδρομής

Λύση 3: Έλεγχος καταλόγου

Όταν δηλώνετε έναν κατάλογο ως διαδρομή classpath, θα αντιστοιχεί πάντα στη ρίζα του χώρου ονομάτων. Για παράδειγμα, αν το "/ usr / local / acme / classes" βρίσκεται στο classpath, τότε η Java θα αναζητήσει μια κλάση "com.acme.example.Appuals". Θα αναζητήσει μια κλάση με το ακόλουθο όνομα διαδρομής:

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

Έτσι, στην ουσία, εάν βάζετε την ακόλουθη διεύθυνση στην διαδρομή classpath, η Java δεν θα μπορέσει να βρει την τάξη:

 / usr / local / acme / classes / 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 / classes / com / acme / example /

Τότε θα υπάρχουν τα ακόλουθα σενάρια:

 # λάθος, FQN απαιτείται java Appuals # λάθος, δεν υπάρχει φάκελος `com / acme / example` στον τρέχοντα κατάλογο εργασίας java com.acme.example.Appuals # λάθος, παρόμοιο με το παραπάνω σενάριο java -classpath. com.acme.example.Appuals # OK; μια σχετική διαδρομή classpath ορίζεται java -classpath ../../ .. com.acme.example.Appuals # OK; ένα απόλυτο classpath ορίζεται java -classpath / usr / local / acme / classes com.acme.example.Appuals 

Σημείωση: Η διαδρομή classpath πρέπει επίσης να περιλαμβάνει όλες τις άλλες κατηγορίες (μη-συστήματος) τις οποίες χρειάζονται οι εφαρμογές σας.

Λύση 4: Έλεγχος πακέτου κλάσης

Εάν όλες οι παραπάνω λύσεις ισχύουν στην περίπτωσή σας, πρέπει να βεβαιωθείτε ότι ο πηγαίος κώδικας σας έχει τοποθετηθεί στον σωστό φάκελο. Επίσης, δηλώσατε σωστά το πακέτο . Αν εκτελέσετε τον κώδικα σας με έναν IDE, πιθανότατα θα σας ενημερώσουμε σχετικά με το θέμα. Ωστόσο, στην περίπτωσή μας, δεδομένου ότι την τρέχουμε σε γραμμή εντολών, το λάθος θα περάσει απαρατήρητο και θα πάρετε το σφάλμα της τάξης υπό συζήτηση.

Ενδιαφέροντα Άρθρα