Kan ikke finde eller indlæse hovedklasse -Java? Sådan repareres det!

Kan ikke finde eller indlæse hovedklasse -Java? Sådan repareres det!

Hvis du bliver ved med at få hovedklassen ikke fundet fejl i dit Java -projekt uden nogen åbenbar grund, skal du ikke bekymre dig, du er ikke alene.





Som en af ​​de mest uforudsigelige og spontane fejl, takket være JVM's (Java Virtual Machine) tendens til at holde sig til en standard klassebane, er problemet med 'hovedklassen ikke fundet' noget, der både hjemsøger amatører og professionelle.





Men dette spørgsmål er faktisk mindre skræmmende, end det ser ud til at være. Læs videre for at finde ud af, hvordan du kan slippe af med denne fejl en gang for alle.





Hvorfor blev hovedklassen ikke fundet?

Inden vi forsøger at forstå, hvordan og hvorfor JVM ikke var i stand til at finde hovedklassen, skal vi forstå begrebet Klassesti i Java.

Hvad er Classpath?

Klassestien er den filsti, som Java -runtime -miljøet søger efter klasser og andre ressourcefiler. Det kan indstilles ved hjælp af enten -klassesti valgmulighed ved udførelse af et program eller ved at indstille systemet CLASSPATH miljøvariabel.



Som navnet antyder, er det simpelthen en filsti, hvor . klasse filer kan findes i en JDK -pakke eller bibliotek.

Når JVM ikke kan finde hovedklassen, skyldes det ofte, at den leder efter den tilsvarende . klasse filer i den forkerte klassebane. Selvfølgelig er måden at afhjælpe dette problem ved manuelt at angive klassebanen enten ved hjælp af pakker eller ved at angive klassebanen.





På dette tidspunkt, hvis du gerne vil opdatere din hukommelse om Java -klasser, kan du se vores guide til oprette klasser i Java .

hindbær pi 3 vs 3b+

Brug af pakker

Lad os oprette en klasse kaldet Prøve . Læg den i en pakke kaldet testPakke . Pakker bruges i Java for at gruppere lignende klasser sammen eller give et unikt navnerum til klasser.





I dette enkle eksempel hjælper brug af en pakke dig med at visualisere, hvordan Javas klassebane fungerer. I din filhåndteringsapplikation er en pakke repræsenteret som en uafhængig mappe.

package testPackage;
public class Test {
public static void main(String args[]) {
System.out.println('File successfully found!');
}
}

Åbn nu en ny terminal og sørg for, at din arbejdskatalog er den samme som den, der indeholder pakkemappen. Du kan ændre arbejdsmappen ved hjælp af CD kommando på ethvert operativsystem.

Udarbejde Test.java ved at køre følgende kommando:

package testPackage;
javac testPackage/Test.java

Dette gemmer den kompilerede binære fil (.class -filen) i testPackage.

For at køre den kompilerede klasse skal du indtaste det fuldt kvalificerede klassenavn i kommandolinjen. Et Java -klasses fuldt kvalificerede navn refererer til dets navn foran sit pakkenavn. I dette tilfælde skal dette se sådan ud:

java testPackage.Test

Denne måde at kalde klassefiler på sikrer også, at du kan kalde eksekverbare filer fra forskellige pakker fra det samme arbejdskatalog. Alt du skal gøre er at ændre det fuldt kvalificerede klassens navn.

I mere avancerede implementeringer anbefaler vi, at du opretter separate undermapper til dine klasser og kildefiler for bedre at administrere filer i pakken.

Manuel angivelse af Classpath

Den anbefalede måde at administrere dine java -filer på er at oprette separate mapper til kildefiler og klasser. Hvis du arbejder på et projekt, er det sandsynligt, at du allerede gør dette.

Konventionelt er biblioteket med kildefiler mærket som src og den med .class -filer er mærket som klasser. Dette er også en måde at sikre, at sandsynligheden for at JVM ikke finder hovedklassen reduceres betydeligt på grund af det korrekt strukturerede bibliotek.

Hvis vi bruger denne metode, er mappestrukturen sådan, før den kompileres:

handlingen kan ikke fuldføres, fordi filen er åben i et andet program
|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes

Hvert led i ovenstående illustration svarer til et niveau i filhierarkiet, som dit projekt skal følge.

For at kompilere dette skal du sørge for, at dit arbejdskatalog er myFolder. Skriv nu følgende kommando:

javac -d classes src/testPackage/Test.java

Det . klasse eksekverbar skal gemmes i myFolder/klasser/testPackage . Derfor ser filmappestrukturen sådan ud: | _+_ |

At køre . klasse fil, skal du køre Java -kommandoen med det fuldt kvalificerede klassenavn og angive den lokale klassebane. Hver sti erklæres i forhold til arbejdskataloget, som i dette tilfælde er myFolder.

|---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes
| |---testPackage
| |---Test.class

At køre denne kommando skulle give dig det ønskede output. Men hvorfor er så meget reorganisering nødvendig for at løse en simpel fejl?

Betydningen af ​​at organisere filer i Java

Selve grunden til, at ‘Could not Find or Load Main Class’ kastes, er fordi JVM ikke var i stand til at finde, hvor din . klasse filer blev gemt.

Den nemmeste måde at løse denne fejl på er at kontrollere, hvor .class -filerne er gemt og eksplicit fortælle JVM at se der. Dette gøres muligt ved at organisere dine kildefiler og eksekverbare filer separat og kontrollere alt fra et arbejdskatalog.

Når du begynder at tilføje konstruktioner som f.eks arv til dit projekt vil filsystemets kompleksitet øge mangfoldigheden. I sådanne projekter eller endda dem, hvor brug af JAR -filer eller brugerdefinerede biblioteker er påkrævet, kan den enkle praksis med at adskille og administrere filer spare dig utallige timers fejlfinding og fejlfinding.

For at læse mere om, hvordan classpath fungerer i Java og de mange ting, du kan kontrollere, når det kommer til at køre din kode, kan du også tage et kig på Oracles detaljeret og brugervenlig reference .

Del Del Tweet E -mail De 10 bedste begynderprojekter for nye programmører

Vil du lære programmering, men ved ikke, hvor du skal starte? Disse programmeringsprojekter og selvstudier for begyndere starter dig.

kan jeg refundere spil på steam
Læs Næste Relaterede emner
  • Programmering
  • Java
Om forfatteren Yash Chellani(10 artikler udgivet)

Yash er en håbefuld datalogistuderende, der elsker at bygge ting og skrive om alt teknisk. I fritiden kan han lide at spille Squash, læse en kopi af den nyeste Murakami og jage drager i Skyrim.

Mere fra Yash Chellani

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere