Erreur Java - mauvais fichier source: fichier ne contient pas de classe x . Veuillez supprimer ou assurez-vous qu'il s'affiche
Récemment commencé à étudier Java pour un examen.
Tandis que des modules d'apprentissage, essayé et obtenu un message d'erreur. Ce que j'ai fait,
//Creating class A (Within package the package: com.test.helpers)
package com.test.helpers;
public class A {
public void sayHello(){
System.out.println("Hello World");
}
}
//And then the class App utilizing the class A
import com.test.helpers.*;
public class App{
public static void main(String args[]){
A a = new A();
a.sayHello();
}
}
J'ai eu ces deux fichiers dans un répertoire appelé "JavaTest" (sur Windows 7),
et la compilation de la A.java à l'aide de la commande "javac -d . A.java"
Et puis, tout en essayant de compiler App.java j'ai obtenu le message d'erreur suivant:
App.java:5: error: cannot access A
A a = new A();
^
bad source file: .\A.java
file does not contain class A
Please remove or make sure it appears in the correct subdirectory of the source path.
1 error
Cependant, le problème semble se résoudre de deux manières,
- La suppression du fichier Source A.java
- Modification de l'instruction d'importation à partir de 'import com.test.les accompagnateurs.*;' pour
'import com.test.les aides.A' dans le fichier 'App.java'.
Je serais très reconnaissant si vous pouvez expliquer ce qui se passe ici. Ou je pourrait faire un dingo une erreur humaine ou une erreur de syntaxe.
Voici le lien vers les fichiers source
Merci beaucoup
la classe de l'App est dans le package par défaut, à droite ?
Oui, je le crois. La structure de répertoire est présent (Après compling A.java) sur le Bureau>JavaTest -com>test>aides>A.class -A.java -App.java Merci de prendre le temps d'avoir un loook.
emmh, je ne peux pas voir la structure de répertoire, mais la classe A doit être dans le path JavaTest\com\test\helpers\A.java , est-il ?
Désolé, le premier commentaire ne montrent pas clairement la structure de la classe. Les fichiers source (A.java et App.java) a été à l'intérieur d'un dossier appelé "JavaTest". Après A.Java a été respecté, c'est classe fichier est apparu à l'intérieur de JavaTest>com>test>aides. L'erreur s'affiche lorsque j'essaye de compiler App.java Il devient ok si l'A.java est supprimé ou l'instruction d'importation dans App.java changé, remplacement de l'astérisque explicitement nom de la classe, j'.e A. Btw, merci de prendre le temps de regarder.
Par ailleurs, si vous le souhaitez, voici le lien pour télécharger le projet: lien Merci.
Oui, je le crois. La structure de répertoire est présent (Après compling A.java) sur le Bureau>JavaTest -com>test>aides>A.class -A.java -App.java Merci de prendre le temps d'avoir un loook.
emmh, je ne peux pas voir la structure de répertoire, mais la classe A doit être dans le path JavaTest\com\test\helpers\A.java , est-il ?
Désolé, le premier commentaire ne montrent pas clairement la structure de la classe. Les fichiers source (A.java et App.java) a été à l'intérieur d'un dossier appelé "JavaTest". Après A.Java a été respecté, c'est classe fichier est apparu à l'intérieur de JavaTest>com>test>aides. L'erreur s'affiche lorsque j'essaye de compiler App.java Il devient ok si l'A.java est supprimé ou l'instruction d'importation dans App.java changé, remplacement de l'astérisque explicitement nom de la classe, j'.e A. Btw, merci de prendre le temps de regarder.
Par ailleurs, si vous le souhaitez, voici le lien pour télécharger le projet: lien Merci.
OriginalL'auteur user3210872 | 2014-07-18
Vous devez vous connecter pour publier un commentaire.
déplacer le A.java sous le dossier JavaTest com/test/helpers. l'erreur que vous voyez est pour le compilateur se plaint qu'A.java est dans un dossier qui ne correspond pas à son paquet de déclaration. Rappelez-vous, vous ne pouvez pas accéder à Un à partir de l'App sans être dans un package.
de src driectory exécutez la commande suivante pour compiler vos classes
puis sous le dossier src de
que doit exécuter votre programme.
OriginalL'auteur Chandru
Salut le problème ici est que la JVM confond le fichier de classe en raison de la
ambiguous
classe de nom de fichier à la fois le répertoire (leJavaTest
ainsi que lacom.test.helpers
répertoire).lorsque vous ne
javac -d . A.java
le compilateur fait une classe de fichier dans le répertoirecom.test.helpers
et maintenant qu'il confond avec la source, il y enJavaTest
Deleting the Source file A.java
Lorsque vous supprimez le fichier source
A.java
deJavaTest
, JVM sait maintenant que le fichier de classe danscom.test....
est utilisée, l'ambiguïté disparaît.Changing the import statement from 'import com.test.helpers.*;' to 'import com.test.helpers.A' in the file, 'App.java'.
Ici vous précisant notamment le fichier à utiliser dans votre implémentation de la classe qui est vous dire au compilateur d'utiliser le fichier
A.java
decom.test...
et pas deJavaTest
paquetMaintenant, la solution de cette ambiguïté, pour ne jamais être un problème pour vous, vous devez importer les fichiers avec l'instruction d'importation c'est à dire
import com.test.helpers.A;
ou si vous voulez faireimport com.test.helpers.*;
alors vous devez utiliser spécifiquementcom.test.helpers.A
en place deA
partout dans votre classe en cours de mise en œuvre de dire au compilateur de ne pas la confondre avec la source àJavaTest
Je sais que c'est beaucoup en retard pour cette réponse, mais je voulais partager mon point de vue pour les prochains lecteurs, si elle pouvait aider, ce serait formidable.
Merci!
OriginalL'auteur mohitR0_0
le fichier A.java doit être dans le path JavaTest\com\test\helpers\A.java
et n'oubliez pas de le compiler comme ceci:
javac -d . com\test\helpers\A.java
code
import com.test.les accompagnateurs.*;code
pourcode
import com.test.les aides.Une;code
?honnêtement, je ne sais pas, mais je pense qu'il a quelque chose à voir avec le fonctionnement interne du chargeur de classe. comme l'A.class fini dans le droit chemin, il n'avait aucun mal à le trouver, et c'est un peu différent avec le caractère générique *. mais comme je l'ai dit, c'est juste une supposition, si je trouve la raison exacte, je serai heureux d'action ( btw, si il résolu votre problème, n'oubliez pas d'accepter la réponse 😉 )
Que vous. Cependant, la raison principale pour mettre cette question ici est d'obtenir une explication des raisons pour lesquelles le programme a travaillé avec A.java source de fichiers dans le mauvais dossier, mais avec instruction d'importation en utilisant le nom de la classe explicitement, au lieu de génériques * ?
OriginalL'auteur jambriz
J'ai le même problème, enfin,
J'ai été résolus.
Si u ont plus de classe dans com.test.les aides alors u peut utiliser import com.test.les accompagnateurs.*;
OriginalL'auteur Shiva Nandam Sirmarigari
chaque chose est à la bonne place, java ne demande pas de mettre votre A.java fichier, dans le dossier aides
l'ensemble de la raison pourquoi votre code a couru avec le A.java fichier supprimé et pas autrement, c'est:
lorsque votre app.java (ou le principal fichier java qui est de l'importation d'autres classes, -->) est dans un package par défaut, puis lors de l'importation des classes, qu'il donne la priorité à la le même répertoire et de ne pas le répertoire du package(si il existe un fichier qui a le même nom que le fichier de classe -> et c'est pourquoi elle donne erreur le mauvais fichier source A.java -> comme il voulait A.class)
Et à cause de cela il y a une règle en java : ne placez jamais un .fichier java (du même nom)en parallèle à l'paquets
donc pour résoudre ce problème, vous devez supprimer le fichier, A.java
ou de le renommer (pour tout autre nom qui n'est pas présente dans le package)
ou vous pouvez utiliser pleinement qualifié instruction d'importation
OriginalL'auteur