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

Servlets/JSP Java Discussion :

execution d'un fichier .class


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut execution d'un fichier .class
    bonjour ,
    j'ai du mal à exécuter un fichier .class,
    alors que l'exécution se fait dans eclipse, quand je le fais avec l'invite de commande windows avec la commande (java StatusSchedulee) il m'affiche l'erreur suivante :Exception in thread "main" java.lang.NoClassDefFoundError: StatusSchedulee/class
    et en bas :
    Could not find the main class: StatusSchedulee.class program will exit


    le pire c'est que j'ai fais des exports du package en un fichier jar(sans oublier tout les options d'ajout de biblio et fichier MANIFEST et tout) mais en vain , j'arrive pas à lancer le program.
    Si quelqu'un à déjà rencontré ce type de problème prière de m'aider le plus tôt possible c'est très urgent svp , ça fait longtemps que je suis bloqué là dessus.
    merci.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    C'est un probleme de chemin vers le package contenant la classe à executer, il faut dire à java où se trouve ta classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp chemin_vers_package.nom_classe_a_executer

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    merci DevServlet pour ta réponse ,
    mais j'essaye de l'exécuter depuis le répertoire où elle se trouve même et je teste aussi avec le nom complet du package.
    vraiment je comprend pas, j'ai essayé toutes les possibilités et j'ai parcouru peut être tout l'internet mais rien ne veut marché c'est bizarre.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Pour exécuter une classe, outre qu'il faut qu'il ait une méthode public static main(String), il faut que la classe (plus précisément le répertoire racine de la hiérarchie de package) se trouve dans le classpath.

    Exemple :
    Pour exécuter : com.boite.soft.MaClasse
    Tu te positionnes (ligne de commande) dans le répertoire ou il y a le répertoire "com"
    Tu exécutes la ligne de commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath . com.boite.soft.MaClasse

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Suis bien cette exemple et ca doit normalement marcher
    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
     
    if ["%JAVA_HOME%"]==[""] goto setjava
    set HOME=.
    set LIB=%HOME%\lib
    set BUILD=%HOME%\classes
     
    set CP=%BUILD%
    set CP=%CP%;%LIB%\ant.jar
    set CP=%CP%;%LIB%\jxl.jar
     
    java -classpath "%CP%" Main.MiseEnOeuvre
    pause
    goto :EOF
     
    :setjava
    echo "JAVA_HOME not set,install your jdk and set this variable."
    pause
    goto :EOF
    Dans mon répertoire classes j'ai toutes mes sources compilées suivant la hiérarchie de ton projet.
    Adapte cet exemple à ton pb et redis moi.
    Sinon envoi moi juste l'entete de la classe que tu veux executer.
    t'as forcement un pb de classpath.

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    bonjour et merci pour votre aide,
    toujours rien ne marche voila la class que je veux exécuter
    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
    51
    52
     
    package com.pe.sy.scheduler.planificateur;
     
     
    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerFactory;
    import org.quartz.impl.StdSchedulerFactory;
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import java.util.*;
    import java.lang.*;
     
     
     
    public class StatusSchedulee {
     
    	public static void main(String[] args)
    	  {
    	    try{
    	      new StatusSchedulee();
    	    }catch(Exception e){
    	      e.printStackTrace();
    	    }
    	  }
    	  public StatusSchedulee()throws Exception{
    	    SchedulerFactory sf = new StdSchedulerFactory();
    	    Scheduler sche = sf.getScheduler();
    	    sche.start();
     
     
     
     
    	    	    JobDetail jDetail4 = new JobDetail(
    	    	    	    "Show status4",sche.DEFAULT_GROUP,login.class);
    	    	    	    CronTrigger cronTrigger4 = new CronTrigger(
    	    	    	    "Cron Trigger4",sche.DEFAULT_GROUP,"0 38 9 ? * *");
    	    	    	    sche.scheduleJob(jDetail4, cronTrigger4); 	    
     
    	  //  sche.shutdown();
    	    if(sche.isShutdown()){
    	      System.out.println("Scheduler is shutdown!");
    	      System.out.println("Job cann't be executed here.");
    	    }
    	    else{
    	      System.out.println("Scheduler isn't shutdown!");
    	      System.out.println("Job is executed here.");
    	    }
    	  }
    	}
    j'ai la même erreur toujours.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Montre nous plutôt à quoi ressemble ton arbo de fichiers, ta ligne de commande et ou tu te positionnes lorsque tu l'exécutes.

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    bon j'ai fais comme tu as dis mickilous et je me suis placer dans le répertoire com avec l'invite de cmd, pour l'arborescence de fichier tu l'as dans "package" (dans le code précédent) et pour la commande j'ai fait toutes les possibilités (avec -cp , inclure le répertoire courant dans le cp, le nom de la classe sans et avec l'extension .class, taper le chemin du package jusqu'à la class ...)
    je ne comprends rien.

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Montres nous la commande que tu tapes et comment tu consitues ton classpath.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Citation Envoyé par hypothese Voir le message
    bon j'ai fais comme tu as dis mickilous et je me suis placer ds le repertoire com avec l'invite de cmd
    non, j'ai dit "Tu te positionnes (ligne de commande) dans le répertoire ou il y a le répertoire "com"". C'est pas pareil.

    Si tu veux qu'on t'aide : Montre nous plutôt à quoi ressemble ton arbo de fichiers, ta ligne de commande et ou tu te positionnes lorsque tu l'exécutes.

    Le code de ta classe à ce stade on s'en fout, puisque la JVM ne la trouve pas.

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    je me place avec l'invite de commande dans:
    C:\Documents and Settings\admin\workspace\sy\build\classes\com
    (com>)
    et le tape par exemple la commande suivante:
    java StatusSchedulee.class
    ou : java com.pe.sy.scheduler.planificateur.StatusSchedulee.class
    ou bien je fais :
    set classpath=%classpath%;.;
    et après je fais :
    java -classpath %classpath% com.pe.sy.scheduler.planificateur.StatusSchedulee.class
    rien ne veux marché.
    pour l'arborescence de fichiers c'est ça:
    com/pe/sy/scheduler/planificateur

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Citation Envoyé par mickilous Voir le message
    Pour exécuter : com.boite.soft.MaClasse
    Tu te positionnes (ligne de commande) dans le répertoire ou il y a le répertoire "com"
    Ce qui veut dire que pour toi, tu te positionnes dans le répertoire :
    C:\Documents and Settings\admin\workspace\sy\build\classes
    Et non pas "dans le répertoire com". OK ?

    Autre chose, on ne spécifie pas l'extension ".class" à l'exécution.

    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd C:\Documents and Settings\admin\workspace\sy\build\classes
    java -classpath . com.pe.sy.scheduler.planificateur.StatusSchedulee
    Après ça tu auras sans doute un problème avec les librairies quartz non présente dans ton classpath. Il faudra rajouter le chemin vers le bon jar dans ton classpath.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -classpath .;../lib/quartz-1.5.1.jar  com.pe.sy.scheduler.planificateur.StatusSchedulee

  13. #13
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    bonjour et merci beaucoup pour votre aide.
    bon, quand je fais :"echo %classpath%" il m'affiche ça:
    C:\Documents and Settings\admin\workspace\sy\WebContent\WEB-INF\lib;.;
    et dans ce lib j'ai toutes les librairies qaurtz et autres.
    donc je fais:
    classes> java -classpath %classpath% com.pe.sy.scheduler.planificateur.StatusSchedulee
    ça donne la même erreur:
    Exception in thread "main" java.lang.NoClassDefFoundError: and

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Il faut que tu saches que le classpath doit contenir le chemin complet vers chaque fichier .jar. Sauf si tu est en jdk6; mais alors le classpath doit néamoins contenir le wildcard '*' pour préciser "tous les jar du répertoires". Ex : C:\Documents and Settings\admin\workspace\sy\WebContent\WEB-INF\lib\*

    Sinon, précise l'erreur complète stp.

  15. #15
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    oui j'ai le jdk6
    et le répertoire: C:\Documents and Settings\admin\workspace\sy\WebContent\WEB-INF\lib\, contient tout les jar.
    j'ai fais comme tu as dis, et j'ai ajouter le '*':
    set classpath=C:\Documents and Settings\admin\workspace\sy\WebContent\WEB-INF\lib\*;.;
    mais ça donne la même erreur:
    Exception in thread "main" java.lang.NoClassDefFoundError: and
    je comprend pas c'est quoi ce "and", et c'est tout ce que j'ai comme erreur maintenant.
    je fais ça parce que je veux déployer ça sur un serveur, je voulais faire ça comme solution temporaire, espérant que après je pourrais faire en sorte à déployer ça de façon à ce que les jobs démarrent avec tomcat.
    donc si vous avez une idée s'il vous plait comment on peut faire cette dernière solution je serai encore très reconnaissant.
    merci pour toutes vos réponses.

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    mais quand je fais :
    set classpath=C:\Documents and Settings\admin\workspace\sy\WebContent\WEB-INF\lib\*
    et:
    classes> java -classpath . com.pe.sy.scheduler.planificateur.StatusSchedulee
    ça donne:
    Exception in thread "main" java.lang.NoClassDefFoundError:org/quartz/SchedulerFactory.

    à noter bien que j'ai tt les jar concernant quartz dans le repertoire lib.

  17. #17
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    bonjour,
    bon, j'ai pu exécuter mon programme(pas parfaitement)
    ce que j'ai fait, c'est que le dossier lib là où il y a mes jars je l'ai déplacé vers C:\
    et j'ai tapé:
    java -classpath C:\lib\*;.; com.pe.sy.scheduler.planificateur.StatusSchedulee
    ça s'exécute mais ça génère aussi une autre exception en relation avec la base de données et surtout avec la méthode getconnection(String url) (j'utilise poolman).
    je vous rappelle que l'exécution se fait parfaitement avec eclipse(avec une erreur de Log4j mais ça ne bloque pas l'exécution comme même).
    donc mon programme ne s'exécute pas jusqu'à la fin, et ça s'arrête dés le premier appel de getconnection(String url).
    si vous avez une idée de comment isoler mon application de cet outil qui s'appelle 'eclipse' je serai très reconnaissant.
    merci.

  18. #18
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 383
    Par défaut
    donc ton problème initial était les espaces dans le classpath :
    C:\Documents and Settings
    (java n'aime pas les espaces dans les chemins)

    Pour ton problème courant, tu devrais :
    - indiquer que ce problème est résolu
    - ouvrir un autre thread dans la rubrique acces aux bases de données et y poster l'erreur que tu obtiens ainsi que ta configuration JDBC.

  19. #19
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 183
    Par défaut
    bonjour,
    merci bien slevy de me rappelé.
    ben, vraiment je sais pas si c'est une question d'espaces ou non, mais bon on est là pour apprendre.
    pour l'autre problème concernant l'accès à la BD je l'ai aussi résolu en rajoutant le fichier poolman.xml(contenant la définition de la BD, jndi, driver, serveur et BD..) dans le répertoire contenant les classes, bon je sais que c'est pas professionnel mais cette histoire de chemins j'essaye de l'éviter pour le moment.
    merci et bonne chance.

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

Discussions similaires

  1. comment cree une application executable depuis un fichier class
    Par lenetfm dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/03/2008, 11h48
  2. [info]Les fichiers .class
    Par vinzzzz dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 29/03/2005, 00h43
  3. Requete d'execution d'un fichier
    Par minimoi1234 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/03/2005, 16h36
  4. [info] suppression cache fichiers .class
    Par nicolas581 dans le forum Applets
    Réponses: 3
    Dernier message: 06/08/2004, 11h39
  5. [JSP][Tomcat] COmment choisir la place des fichiers .class?
    Par mathieu dans le forum Tomcat et TomEE
    Réponses: 16
    Dernier message: 03/03/2004, 09h24

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