package

tiger360
package

bonsoir
comme me l a si gentillement dit frederic j poste mon probleme sur le fofo

aider moi chui nul

j voudrais compiler et executer la classe CoursDonne sans le main avec comme package : package projet;

et le main se trouve ds Main.java et j importe la classe pour pouvoir l executer : import projet.CoursDonne;

et voila ce que j ai comme message d erreur :

Main.java:1: package projet does not exist
import projet.CoursDonne;
              ^
Main.java:5: cannot access CoursDonne
bad class file: ./CoursDonne.class
class file contains wrong class: projet.CoursDonne
Please remove or make sure it appears in the correct subdirectory of the classpath.
                        CoursDonne coursDonnes = new CoursDonne("1","2","3","4",5);
                        ^
2 errors

et merci d avance. :)

fredericmazue

Quote:
CoursDonne sans le main

Admettons mais...

Quote:
et le main se trouve ds Main.java et j importe la classe pour pouvoir l executer :
Code:
import projet.CoursDonne;

Faut savoir si c'est avec ou sans Main.java non ?

Quote:
Main.java:1: package projet does not exist
import projet.CoursDonne;

Le message d'erreur est clair, tu as compilé Main.java alors que tu as dit ne pas vouloir le faire. Une compilation à l'insu de ton plein gré quoi :)
Or comme CoursDonne.java n'est pas encore compilé, CoursDonne.class n'existe pas et le compilateur la recherche et ne le trouve pas pour compiler Main.java

Attention quand CoursDonne sera compilé ça ne suffira pas. Il faudra encore placer CoursDonne.class dans un répertoire projet et que ce répertoire soit pointé par le classpath pour que le compilateur le voit

Un conseil. Essaie donc déjà de compiler sans package, c'est à dire tout dans le package courant (donc pas de déclaration package dans les fichiers .java). Et veille à donner le répertoire courant dans le classpath en compilant toujours de cette façon

javac .cp;%CLASSPATH% Main.java (Windows)

ou

avac .cp:$CLASSPATH Main.java (Linux)

On t'a probablement dit que ne pas utiliser de package du tout ça ne se fait pas. C'est vrai quand on a l'habitude ;) Pour te faire la main (sans jeu de mot ;) ) Essaie d'abord sans package.

tiger360

Quote:
Le message d'erreur est clair, tu as compilé Main.java alors que tu as dit ne pas vouloir le faire. Une compilation à l'insu de ton plein gré quoi
Or comme CoursDonne.java n'est pas encore compilé, CoursDonne.class n'existe pas et le compilateur la recherche et ne le trouve pas pour compiler Main.java

j l'avais compiler mais ta commande javac .cp:$CLASSPATH Main.java (Linux)ne fonctionne pas

fredericmazue

Quote:
j'avais compiler mais ta commande Code:
javac .cp:$CLASSPATH Main.java (Linux)
ne fonctionne pas

heu oui, excuse moi :oops:

J'étais pris par le temps hier et j'ai écris beaucoup trop vite, et bien sûr fait des fautes de frappe. La commande c'est:

javac -cp .:$CLASSPATH Main.java

avec un espace entre

-cp et .:$CLASSPATH

Tu es sous Linux ?
Bravo! :)

tiger360

merci mais j vois pas pourquoi je dois taper
javac -cp .:$CLASSPATH Main.java tout ca alors que si j tape javac Main.java tout court ca marche aussi sans mettre de package

mais j comprend toujours pas pourquoi les packages ne marche pas chez moi

bien sur que j utitlise linux :D Vista peut aller se rhabiller

fredericmazue

Quote:
tout ca alors que si j tape javac Main.java tout court ca marche aussi sans mettre de package

Bonne question :)
La réponse est que j'ai voulu t'éviter de tomber dans un problème courant. Vois tu, selon la JVM il arrive que le répertoire courant ne figure pas automatiquement dans le classpath. Et dans ce cas ta compilation, même sans package, aurait échoué.
Donc ma commande "compliquée" n'avait pour but que d'intégrer à coup sûr le répertoire courant dans le classpath et je te recommande vivement de toujours le faire pareil ;)

Quote:
mais j comprend toujours pas pourquoi les packages ne marche pas chez moi

Qu'est-ce que ça veut dire ça ?
Les packages marchent chez toi comme chez tout le monde. Le tout est de savoir les faire marcher. Ca commence par placer les fichiers compilés .class dans les bons répertoires, ce que le compilateur javac ne fait pas tout seul par miracle.

exemple:
Soient les fichiers CoursDonne.java et Main.java dans un répertoire quelconque
le fichier CoursDonne.java contient:
package monpackage;
- tu compiles CoursDonne.java,
- ensuite tu dois *toi même* placer CoursDonne.class dans un sous-repertoire de nom monpackage:

mkdir monpackage
mv CoursDonne.class ./monpackage/CoursDonne.class

ensuite tu compiles Main. Comme dedans il y a:

import monpackage.CoursDonne;

le compilateur va chercher monpackage/CoursDonne dans tous les répertoires pointés par le classpath. Tu comprends maintenant pourquoi je tenais tant à ce que le répertoire courant y figure ;)
Si tu as bien fait la manip que je t'ai décrit, alors Main.Java compilera :)

C'est toujours comme ça que ça fonctionne même si des IDE comme Netbeans ou Eclipse l'escamotent, car ils font toutes ces manips pour toi, automatiquement.

Capito ?

Quote:
bien sur que j utitlise linux

Laisse tomber Java pour un vrai langage comme C, C++, Erlang, Haskell, Lisp ou Python et tu seras sur la bonne voie ;)

Quel Linux au fait ?

tiger360

ah cool merci ca marche mais c est lourd come manip
pourquoi est ce que quand je tape echo $CLASSPATH
c est vide?

Laisse tomber Java pour un vrai langage comme C, C++, Erlang, Haskell, Lisp ou Python et tu seras sur la bonne voie  

Quel Linux au fait ?

facile a dire je suis obliger de travailler dessus

moi j utilise Suse :)

fredericmazue

Quote:
ah cool merci ca marche

:)
Parfait, je suis heureux de t'avoir dépanné.
Quote:
mais c est lourd come manip

Alors sache que dès que Java est dans le coup, il y a comme une lourdeur, une pesanteur ambiante... :lol:

Tu le sais sans doute, je ne l''aime pas beaucoup ce ¤¤¤¤ langage :)

Pour cette manip particulière, maintenant que tu as compris le principe, (c'est toujours important de comprendre ce qu'on fait), tu peux te reposer sur des outils comme Netbeans ou Eclipse qui vont faire les manips pour toi

Quote:
pourquoi est ce que quand je tape echo $CLASSPATH
c est vide?

Parce que c'est vide :)
Dans ton Linux, CLASSPATH n'est pas définie. Mais moi je ne pouvais pas le savoir. Je suis loin et de là où je suis je ne vois pas bien ta machine ;)
Alors pour être sûr de ne pas abimer ton CLASSPATH, je t'ai dit

javac -cp .:$CLASSPATH Main.java

Alors que dans ce cas précis

javac -cp . Main.java

Aurait suffit.

Quote:
facile a dire je suis obliger de travailler dessus

Tu parles de Java là ? Oui je sais bien que tu as un travail à faire en Java.
Mais comme je ne dédaigne pas lancer de temps en temps un bon gros troll anti Java, je vais te dire:
Quand on a fait beaucoup de Java et rien que du Java, on ignore à peu près tout de l'informatique. Et je trouve triste à pleurer que de nos jours à l'école les gars n'apprennent que Java et Java entre deux cours de Java.

Alors toi, comme tu es sous Linux, tu as dans les mains un outil et un environnement ideaux pour voir d'autres choses par toi même. Bref ouvrir tes horizons et ça serait dommage de t'en priver. C'est un peu ce que je voulais te dire dans mon message précédent :)

Quote:
moi j utilise Suse

Ah Suse... Je l'aimais bien jusqu'à un moment. Mais ces dernières années, trop de problèmes à s'arracher les cheveux avec les mises à jour.
Moi je suis Gentoo à fond.
J'en ai 4 en réseau en ce moment et j'en suis très content. "C'est d'la bombe" comme vous dites maintenant les jeunots ;)

Au plaisir de te revoir sur ce forum :)