J'ai lu les questions précédemment posées. Certains sont vagues et aucun n'a résolu mon problème, alors je suis obligé de le demander à nouveau.
J'ai deux cours simples,
package One;
import One.Inner.MyFrame;
public class test
{
public static void main(String args[])
{
MyFrame f= new MyFrame();
}
}
Et l'autre classe est,
package One.Inner;
import Java.awt.*;
import javax.swing.*;
public class MyFrame extends JFrame
{
public MyFrame()
{
setPreferredSize(new Dimension(400,560));
setVisible(true);
}
}
Je suis au dossier de base "de base" dans Windows cmd. Je compile en utilisant
basic> javac *.Java -d .
Un dossier et un sous-dossier sont créés.
cd One
basic\One> Java test
Cela génère un grand nombre d'erreurs. Beaucoup de réponses demandaient de spécifier le chemin complet qui ne fonctionnait pas ..__ Mes classes sont dans One, donc spécifier One en utilisant -cp ne fonctionnait pas non plus.
Vous le courriez comme:
Java One.Test
... mais à partir du répertoire root (basic
), not à partir du répertoire One
. Vous spécifiez toujours le nom de classe pleinement qualifié .
Oh, et les noms de paquet en Java devraient être en minuscule, donc one
et one.inner
, et non One
et One.Inner
. Juste une convention, mais qui suit à peu près tout le monde.
Si le répertoire est:
basic\One
Exécutez Java à partir du répertoire de base du package:
basic>Java One.test or basic>One.test <optional arguments>
(idéalement le paquet serait en minuscule et la classe en majuscule):
basic>Java one.Test
Si vous obtenez des messages "n'existe pas", la commande Java ne peut pas trouver les classes que vous avez référencées dans votre classe. Vous pouvez les pointer avec l'option -cp ('.' Signifie 'ici', et vous pouvez ajouter autant d'endroits que vous le souhaitez, divisé par ';' sous Windows et ':' sous Linux).
basic>Java -cp . one.Test
or
basic>Java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test
En effet, si vous déclarez package dans votre fichier Java, le compilateur Java pense que votre système est doté de la même architecture de dossiers. Dans votre cas, le compilateur Java recherche One comme package, puis test.class. S'il vous plaît jeter un oeil pour l'image ci-dessous (je mon cas j'utilise Bonjour et Testeur)
Comme vous pouvez voir le chemin dans l'image est Hello/Tester (mon exemple), l'architecture devrait donc ressembler à Hello-> Tester.
Et si vous ne possédez pas la même architecture et ne souhaitez pas en créer lors de la compilation, utilisez la commande javacp.
lors de la création d'une classe avec un package si vous souhaitez l'exécuter à partir de cmd, vous devez créer un répertoire portant le même nom de package, y placer la classe. Vous pouvez ensuite l'exécuter facilement. Par exemple, vous avez créé une classe portant le nom "one" et cette classe dans le paquet portant le nom pack, vous devez exécuter ces commandes
1 javac un.Java
après la compilation a créé un répertoire avec le nom pack, après cela lance cette commande
2 Java pack.one
Remarque:
Tout cela doit être fait dans le répertoire de travail courant et le nom "un", je l’ai choisi ici comme nom de fichier et nom de classe principale Nous connaissons tous le premier nom utilisé dans la première commande est le nom de fichier et le second. est le nom de la classe principale
La ligne suivante du code Haralan Dobrev résout le problème.
Java -cp ../ one.Test