2009-12-30 7 views
1

J'ai une interface & sa classe d'implémentation dans le même paquet. J'utilise javac dans la ligne de commande pour les compiler. Je suis capable de compiler la classe d'interface avec succès, mais quand essayer de compiler la classe d'implémentation après avoir compilé la classe d'interface, j'obtiens l'erreur - symbole non trouvé. Cependant, comme les deux l'interface & son implémentation sont dans le même dossier, si je fais un Javac *. Je suis capable de les compiler tous les deux.Question du comportement du compilateur Java

Quelqu'un peut-il m'aider à comprendre ce comportement? Merci pour votre temps

+0

Pouvez-vous clarifier un peu? Vous dites que vous ne pouvez pas "compiler la classe d'implémentation après avoir compilé la classe d'interface", mais cela fonctionne si vous "faites un Javac". "Faire un javac" est ce que la plupart des gens appellent "compiler la classe". Alors pouvez-vous nous donner les lignes de commande que vous utilisez actuellement? – phtrivier

+0

Il peut être utile de montrer exactement les commandes que vous tapez et le texte complet exact des messages d'erreur. – MatrixFrog

+0

Je voulais dire Javac *. – Ravishankar

Répondre

1

Vous devez compiler les deux fichiers en même temps ou ajouter le fichier .class de la première exécution dans le chemin de classe de javac. javac n'essaie pas d'être intelligent et ne recherche pas sur votre disque dur les fichiers qui pourraient résoudre les symboles manquants. Si vous ne passez pas quelque chose, il ne le trouvera pas.

5

Le compilateur Java cherche des paquets au moyen d'une convention de nom de fichier, a.b.c.Interface est interprété comme look pour l'interface a/b/c/Interface.class

Si vous exécutez javac à partir de la racine de votre classpath, le compilateur trouver votre interface. C'est à dire. Si votre paquet est au D:\sources\a\b\c, commencez javac dans D:\sources et compilez a\b\c\Impl.java

+0

C'est la solution exacte. – JCasso