Επιδιόρθωση: Δεν ήταν δυνατή η εύρεση ή η φόρτωση της κύριας τάξης

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

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

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

Τι προκαλεί το σφάλμα "Δεν ήταν δυνατή η εύρεση ή η φόρτωση της κύριας κλάσης" στην Java;

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

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

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

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

Η κανονική σύνταξη της εντολής είναι κάπως έτσι:

 java [...] [...]

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

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

java -Xmx100m com.acme.example.ListAppuals kevin βέλη bart

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

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

Πώς να διορθώσετε "Δεν ήταν δυνατή η εύρεση ή η φόρτωση της κύριας κλάσης"

Λύση 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 δεν μπορούσε να βρει το καθορισμένο όνομα κλάσης στη διαδρομή. Το classpath είναι μια διαδρομή όπου ο χρόνος εκτέλεσης Java αναζητά πόρους και αρχεία κλάσης. Μπορείτε εύκολα να ορίσετε το classpath χρησιμοποιώντας δύο διαφορετικές εντολές όπως φαίνεται παρακάτω:

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

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

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

Ρύθμιση classpath

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

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

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

So in essence, if you put the following address in the classpath, Java will not be able to find the class:

/usr/local/acme/classes/com/acme/example

You should also check your subdirectory and see if it matches the FQN. If your classes FQN is “com.acme.example.Appuals”, then Java will search for an “Appuals.class” in the directory “com/acme/example”.

To give you an example, let’s suppose the following scenario:

  • The class you want to run is: com.acme.example.Appuals
  • The full file path is: /usr/local/acme/classes/com/acme/example/Appuals.class
  • The current working directory is: /usr/local/acme/classes/com/acme/example/

Then the following scenarios would hold:

# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals

Note: The classpath needs to also include all the other classes (non-system) which your applications needs.

Solution 4: Checking class package

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