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

Java Discussion :

Code retour d'un pgm java (main)


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 37
    Points : 25
    Points
    25
    Par défaut Code retour d'un pgm java (main)
    Est-ce possible de faire en sorte que la méthode main d'un programme java retourne un code à l'OS qui l'a lancé ?
    Si oui comment faut-il faire ?

    En effet lorsque j'exécute le programme java suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import java.io.*;
    import java.util.*;
    public class testRetour {
     public static int main(String[] args) {
     String r = args[0];
     System.out.println("test de retour de code...");
     System.out.println( r );
     return r;
    }
    à partir du shell suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    java testRetour 15 
    echo ">>>"$?"<<<"
    if [[ $? != 0 ]]
    then
         echo '       ERREUR  '
    fi
    J'ai l'erreur suivante :
    Exception in thread "main" java.lang.NoClassDefFoundError: testRetour

    !!!

  2. #2
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 42
    Points : 50
    Points
    50
    Par défaut
    Salut!

    L'erreur obtenue est tout à fait normal car la class d'entrée de ton appli doit comporter une méthode de signature

    public static void main(String[] args);
    Et
    public static int main(String[] args); est reconnue comme une méthode static usuelle et sera traitée telle.

    En conclusion le main de java est strictement de type void donc ne renvoie pas de valeur.

    Je peux me tromper...
    A+

  3. #3
    Membre actif Avatar de bidi
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 262
    Points : 266
    Points
    266
    Par défaut
    Je peux me tromper...
    Non, c'est bien juste ;-)

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Je ne sais pas si ca peut aider mais main est sensée renvoyer un int et tu lui fais renvoyer une String.

  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
    Salut,

    Citation Envoyé par hegros
    Je ne sais pas si ca peut aider mais main est sensée renvoyer un int et tu lui fais renvoyer une String.
    En effet... Je suppose donc que ton code n'a pas compilé d'où la raison de ton exception (il ne trouve pas la classe).



    Maintenant professeur a également raison concernant le type de retour de main() : c'est void !



    Par défaut le code de retour d'une application Java est 0. Si tu veux retourner une autre valeur il faut utiliser la méthode System.exit(int)...

    a++

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je ne comprends pas, si par défaut le code de retour d'une appli java est 0, le type de main doit être int, non ?

  7. #7
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par Trap D
    Je ne comprends pas, si par défaut le code de retour d'une appli java est 0, le type de main doit être int, non ?
    Non, le type de main est bien void.

    Dans le cas de Java, c'est la JVM elle-même et non le programme Java, qui renvoie un code de retour. Par défaut, quand elle termine l'exécution d'un programme, elle renvoie 0. L'utilisation de System.exit(une_valeur) permet de "dire" à la JVM de renvoyer un autre code de retour.

  8. #8
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    C'est comme un script shell, si tu ne fais pas un "exit 0" explicite, le code retour sera à 0 par défaut !!
    En java c'est pareil, tant que tu fais pas de System.exit(x), on considère que c'est ok donc 0.
    Pour détailler un peu plus ( corrigez moi si je me trompe ) : en fait le code retour après avoir lancé un programme n'est pas le code retour du programme lui-même ( d'ou la présence de void comme type de retour dans le main ) mais de l'executable "/monRepertoireJava/bin/java", pour forcer donc le retour de la commande "java", il faut un appel système, le fameux "System.exit(x)".

    EDIT Grillaid

  9. #9
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    je rappelle aux néophites que la commande :
    lance un programme nommé "java". De plus, rappelez-vous que le code que vous programmez n'es pas compilé mais est seulement transformé en bytecode ... il faut donc "lancer un processus qui va lire votre bytecode et l'interpréter" ... et c'est ce processus dont on récupère le code de retour... (il est aussi appelé JVM )

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    Il est possible de renvoyer autre chose qu'un int avec System.exit ? ( désolé j'ai pas le prototype sous les yeux)

  11. #11
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Non, par contre rien ne t'empêche de "renvoyer" du texte sur la sortie standar ou la sortie erreur : System.out.print("OK"), System.err.print("NOK") !

  12. #12
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Non, par contre rien ne t'empêche de "renvoyer" du texte sur la sortie standar ou la sortie erreur : System.out.print("OK"), System.err.print("NOK") !

  13. #13
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    fait gaffe, tu radote ...

    Et puis si il a redirigé les sorties standart et d'erreur, soit par programmation soit par script, tu le vois pas à l'écran ... dsl ... C pas fiable .

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 37
    Points : 25
    Points
    25
    Par défaut
    Je m'en sorts donc avec "System.exit()"
    Merci à vous tous.

  15. #15
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Citation Envoyé par Descent
    Citation Envoyé par Trap D
    Je ne comprends pas, si par défaut le code de retour d'une appli java est 0, le type de main doit être int, non ?
    Non, le type de main est bien void.

    Dans le cas de Java, c'est la JVM elle-même et non le programme Java, qui renvoie un code de retour. Par défaut, quand elle termine l'exécution d'un programme, elle renvoie 0. L'utilisation de System.exit(une_valeur) permet de "dire" à la JVM de renvoyer un autre code de retour.
    Merci pour l'explication

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

Discussions similaires

  1. Code retour d'un programme Java lancé par bat/.sh
    Par ghiwani80 dans le forum Général Java
    Réponses: 3
    Dernier message: 22/10/2012, 09h17
  2. Code retour d'un programme java et script bash
    Par sywave dans le forum Général Java
    Réponses: 1
    Dernier message: 30/06/2011, 22h51
  3. Recuperer le code retour d'un script ANT en Java
    Par Tidav16 dans le forum ANT
    Réponses: 0
    Dernier message: 25/09/2008, 16h36
  4. code retour UNIX sur erreur ORA
    Par vinz_07 dans le forum Administration
    Réponses: 7
    Dernier message: 25/08/2004, 11h04
  5. [commande DOS] Récupérer le code retour d'un programme
    Par bobunny dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 04/06/2004, 15h51

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