IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

compiler avec javac


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut compiler avec javac
    salut
    je viens de creer plusieurs classes dans un meme package. en compilant une classe qui n'utilise pas les services d'une autre ça passe sans problème, mais quand j'essai de compiler une classe qui fait appel aux services d'une classe se trouvant dans le meme package, j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    javac -d . ThreadCompteDepot.java
     
    ThreadCompteDepot.java:13: cannot find symbol
    symbol  : class Compte
    location: class rmi_server.ThreadCompteDepot
            public ThreadCompteDepot(String nom,Compte compte,double montant){
                                                ^
    quelqu'un peut m'aider s'il vous plait?
    merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu dois spécifier le classpath qui sera utilisé pour la recherche des classes déjà compilé, et qui doit pointé vers le répertoire de base qui contient le premier package, par exemple puisque tu ne semble avoir d'un seul niveau de package :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -classpath .. -d . ThreadCompteDepot.java
    (tu peux bien sûr utiliser le chemin complet)


    Et si tu utilises un répertoire différent pour les sources et les *.class, il faut aussi spécifié le sourcepath qui doit pointer vers le répertoire des sources (par défaut c'est le même que le classpath)

    a++

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    merci adiGuba,
    ça a marché, j'ai pu compilé tous les programmes. mais j'ai pas compris grand chose, car en faisant je pensais que les fichiers .class créés seraient placés dans le repertoire courant, or là il me créé un autre repertoire dans le repertoire courant et portant le meme nom que ce dernier. en plus je ne sais pas vraiment sur quel repertoire il pointe, et que represente les deux points.
    si excuse moi si mes questions paraissent un peu bete, mais je suis nouveau dans ce domaine, et mon souhait c'est d'etre assez bon un jour.
    alors si tu pouvais, ou quelqu'un d'autre, m'eclaircir un peu mieux là dessus ça m'aidera enormement.
    encore merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    maintenant j'aimerai créer un stub avec la commande rmic. mais quand j'execute la commande j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rmic -classpath ..  ICompteImpl
    error: Class ICompteImpl not found.
    où peut bien se trouver l'erreur ?

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cerco1 Voir le message
    merci adiGuba,
    ça a marché, j'ai pu compilé tous les programmes. mais j'ai pas compris grand chose, car en faisant je pensais que les fichiers .class créés seraient placés dans le repertoire courant, or là il me créé un autre repertoire dans le repertoire courant et portant le meme nom que ce dernier. en plus
    Oui en fait lorsque tu spécifies un classpath l'option -d recrée toutes l'arborescence du package. Pour obtenir le comportement que tu souhaites (*.class dans le même répertoire que le *.java) tu peux tout simplement te passer de cette option (c'est le comportement par défaut).


    Citation Envoyé par cerco1 Voir le message
    je ne sais pas vraiment sur quel repertoire il pointe, et que represente les deux points.
    Les deux points représentent le répertoire parent.
    Le classpath doit pointer vers le répertoire de base de tes classes.
    Mais tu peux bien sûr utiliser un chemin complet

    Par exemple si ton fichier ThreadCompteDepot.java est dans le répertoire c:\dev\projet\rmi_server alors ton classpath est c:\dev\projet (les répertoires représentant les packages ne font pas partis du classpath), et donc tu ferais quelques chose du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -classpath c:\dev\projet ThreadCompteDepot.java
    a++

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cerco1 Voir le message
    maintenant j'aimerai créer un stub avec la commande rmic. mais quand j'execute la commande j'ai ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    rmic -classpath ..  ICompteImpl
    error: Class ICompteImpl not found.
    où peut bien se trouver l'erreur ?
    Tu as deux types de commandes :
    • javac qui attend un nom de fichier, par exemple ThreadCompteDepot.java.
    • java, rmic et quelques autres qui attendent un nom de classe, et là tu dois fournir le nom Java de la classe et non pas le nom du fichier (c'est à dire package.Nom par exemple rmi_server.ThreadCompteDepot)


    Donc dans ce cas ce doit être une commande du style (si c'est bien le même package) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rmic -classpath ..  rmi_server.ICompteImpl
    a++

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    encore merci pour tes eclaircissements qui m'ont beaucoup aider à progresser.
    tout semble marcher actuellemnt, la commande rmic est passée, j'ai pu lancé le registre RMI( start rmiregistry) . cependant il me semble que j'ai un problème avec la creation de mon objet distant. voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static void main(String[] args) {
    		System.setSecurityManager(new RMISecurityManager());
    		try{
    			System.out.println("Démarrage du serveur...");
    			ICompteImpl objDis = new ICompteImpl();
    			Naming.rebind("rmi://localhost:1099/obj",objDis);
    			System.out.println("Serveur pret...");
    		}
    		catch (Exception o) {}
    	}
    en executant ce code le message 'Démarrage du serveur..", s'affiche bien. par contre l'autre(Serveur pret...), ne s'affiche pas. et je n'ai aucun mesage d'erreur.
    quelqu'un à une idée d'ou peut venir le problème ?
    merci

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cerco1 Voir le message
    et je n'ai aucun mesage d'erreur.
    C'est une peu normal puisque tu ignores toutes les exceptions !!!


    Il ne faut JAMAIS ignorer une exception. Au minimum il faut faire un prinStackTrace() (et même si c'est juste pour un test) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch (Exception e) { e.prinStackTrace(); }
    a++

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    merci encore adiguba,
    j'ai donc ajouter o.printStackTrace comme tu me l'as conseillé, et voici ce que j'ai comme message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    	java.lang.ClassNotFoundException: rmi_server.ICompteImpl_Stub
    	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
    	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
    	at sun.rmi.transport.Transport$1.run(Transport.java:153)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
    	at java.lang.Thread.run(Thread.java:595)
    	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    	at java.rmi.Naming.rebind(Unknown Source)
    	at rmi_server.Serveur.main(Serveur.java:13)
    Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    	java.lang.ClassNotFoundException: rmi_server.ICompteImpl_Stub
    	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
    	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
    	at sun.rmi.transport.Transport$1.run(Transport.java:153)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: java.lang.ClassNotFoundException: rmi_server.ICompteImpl_Stub
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:242)
    	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:430)
    	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
    	at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
    	at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
    	at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1543)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1465)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1698)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
    	... 9 more
     
    Démarrage du serveur...
    j'ai l'impression que l'erreur se trouve à la ligne de la nomination de l'objet distant dans le registre RMI. car la ligne 13 du code correspond bien à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Naming.rebind("rmi://localhost:1099/obj",objDis);

    si quelqu'un a une idée, merci bien vouloir m'aider.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    personne ne peux m'aider à resoudre ce problème?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compiler avec javac / créer un jar
    Par oneagaindoguys dans le forum Général Java
    Réponses: 22
    Dernier message: 20/05/2009, 12h06
  2. Compiler avec javac
    Par shayologo dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 14/04/2008, 13h21
  3. probleme lors de la compilation avec javac
    Par Th3dJoBiN dans le forum Langage
    Réponses: 3
    Dernier message: 12/12/2006, 23h16
  4. Comment compiler avec javac des jar sans utiliser -cp
    Par Battosaiii dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2006, 17h03
  5. Réponses: 27
    Dernier message: 23/03/2006, 07h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo