2010-09-11 6 views
19

Je ne suis pas très expérimenté avec Java et cela me rend fou. J'ai écrit un programme Java FileManagement et j'ai besoin de le lancer depuis la ligne de commande.Exécution du programme Java à partir de la ligne de commande Linux

Je peux le compiler à partir de la ligne de commande avec javac FileManagement/*.java qui va créer toutes les classes dans ce dossier, mais lorsque je tente java FileManagement.Main il dit:

Exception in thread "main" java.lang.NoClassDefFoundError: FileManagement/Main

La chose est que je l'ai essayé la même procédure dans un ordinateur à distance et ça fonctionne bien. Ça ne marche pas sur le mien.

+0

http://www.skylit.com/javamethods/ faqs/javaindos.html a une bonne introduction pour les débutants. – Pramod

+0

@Pramod. Ce lien est pour les fenêtres si ... – Larry

Répondre

20

Si votre classe Main est dans un paquet appelé FileManagement, essayez:

java -cp . FileManagement.Main 

dans le dossier parent du dossier FileManagement.

Si votre Main classe n'est pas dans un paquet (le package par défaut) puis cd dans le dossier FileManagement et essayer:

java -cp . Main 

Plus d'informations sur le CLASSPATH et comment le JRE trouver des cours:

+0

Merci beaucoup. Problème résolu – Altober

+0

@Altober, bon d'entendre cela. Je vous encourage à lire un peu sur le chemin de classe afin que vous sachiez pourquoi cela n'a pas fonctionné. –

+0

Merci pour votre temps – Altober

1

Quel est le nom du package de votre cours? S'il n'y a pas de nom de paquetage, alors la solution est probablement la suivante:

java -cp FileManagement Main 
+0

Merci pour votre temps Bart K a donné la même solution et cela a fonctionné. Merci encore Thomas – Altober

+1

Si la classe principale était nommée "Main" (sans package), et si la classe se trouvait simplement dans le répertoire nommé "FileManagement". La même chose que cd FileManagement; java cp. Main –

+0

Ah, désolé, vous avez ajouté 'FileManagement' au classpath. Je pensais que vous essayiez d'exécuter 'FileManagement' et donniez' Main' comme paramètre de ligne de commande. –

5

Les types en comprennent la syntaxe.

  1. Si le fichier de classe est présent dans le répertoire actuel.

    java -cp. fileName

  2. Si le fichier de classe est présent dans le répertoire. Aller à la Dir Parent et entrez ci-dessous cmd.

    java -cp. dir1.dir2.dir3.fileName

  3. S'il y a une dépendance à l'égard des pots externes puis,

    java -cp. ./ jarName1: ./ jarName2 fileName

    Hope this helps.

1

(Ceci est la réponse KISS.)

Disons que vous avez plusieurs.fichiers java dans le répertoire courant:

$ ls -1 *.java 
javaFileName1.java 
javaFileName2.java 

Disons que chacun d'entre eux ont une méthode main() (donc ils sont des programmes, et non libs), puis les compilent faire:

javac *.java -d . 

Cela va générer comme de nombreux sous-dossiers en tant que "packages" auxquels les fichiers .java sont associés. Dans mon cas, tous les fichiers Java où à l'intérieur sous le même nom de package packageName, donc un seul dossier a été généré avec ce nom, pour ainsi exécuter chacun d'eux:

java -cp . packageName.javaFileName1 
java -cp . packageName.javaFileName2 
Questions connexes