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

avec Java Discussion :

souci de lancement de classe depuis une autre classe


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut souci de lancement de classe depuis une autre classe
    Bonjour,
    je crée un projet dans le quel une de mes class effectue un téléchargement, et une seconde doit concatener les fichiers télécharger (en lancant un bash).

    mon souci, et après recherche c'est que je n'arrive pas a faire lancer la 2ème classe (que j'ai appelé execution) depuis la première.

    pourriez vous m'indiquer la marche a suivre s'il vous plait ?

    Je regrette je ne peux vous donner plus ample information concernant le code.

    juste en gros, une premiere classe lance une fenêtre

    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
     
    package mygribwindow;
     
    public class MyGribwindow {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            MyWindow mw = new MyWindow();
          mw.setVisible(true);
        }
     
    }
    ensuite quand l'utilisateur clique sur le Ok de cette fenetre le téléchargement se lance, et une fois fini, la fenêtre se ferme. C'est a la suite de cela que je souhaite lancer ma classe "Execution" qui concatène les fichiers que j'ai chargé

    Je rappelle que indépendement quand je le fais ca marche.

    auriez vous une idée svp ?

    par avance merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand tu dis lancer ta classe Execution, je suppose que tu as fais une classe avec une méthode main. Il suffit donc d'invoquer cette méthode pour exécuter son code, comme tu le ferais depuis ton shell, en passant les bons paramètres. Dans ton cas :
    Les trois petits points sont à remplacer par les paramètres attendus.

    Petit truc: Si tu définis la méthode comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public static void main(String...args) {
    }
    Tu pourras passer directement les paramètres, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main( "param1", "param2");
    Avec le paramètre en tableau tu es obligé de créer un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main( new String[]{"param1", "param2"});
    On est pas obligé de mettre une méthode main dans toutes les classes. La méthode main est un point d'entrée pour lancer le programme. Les méthodes de ces classes permettent aux instances de ces classes de s'appeler les unes les autres. Les méthodes static le permet dans instancier la classe, comme dans le cas de la méthode main.

    Il est également possible de lancer un autre programme, Java ou pas Java, en utilisant la classe ProcessBuilder, comme si on la lançait depuis un shell. On peut considérer l'autre classe comme un autre programme Java, mais c'est tout de même plus simple d'invoquer directement une méthode si les deux classes sont dans le même "programme" (ce qui signifie soit qu'elles soient dans le même classpath à l'exécution de la première qui sert de point d'entrée).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    bonjour Joel.Drigo,

    voici le code de ma méthode EXECUTION. en effet elle fait appel a un shell

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    package mygribwindow;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
     
    /**
     *
     * @author moi
     */
    public class Execution {
     
        /**
         * @param args the command line arguments
         * @throws java.io.IOException
         */
     
        public static void main(String[] args) throws IOException {
            // TODO code application logic here
            Runtime runtime = Runtime.getRuntime();
    String[] cmd = { "/bin/sh", "-c", "bash /Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" };
    final Process process = runtime.exec(cmd);
     
    // Consommation de la sortie standard de l'application externe dans un Thread separe
    new Thread() {
            @Override
    	public void run() {
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    			String line = "";
    			try {
    				while((line = reader.readLine()) != null) {
    					// Traitement du flux de sortie de l'application si besoin est
    				}
    			} finally {
    				reader.close();
    			}
    		} catch(IOException ioe) {
    		}
    	}
    }.start();
     
    // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
    new Thread() {
            @Override
    	public void run() {
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    			String line = "";
    			try {
    				while((line = reader.readLine()) != null) {
    					// Traitement du flux d'erreur de l'application si besoin est
    				}
    			} finally {
    				reader.close();
    			}
    		} catch(IOException ioe) {
    		}
    	}
    }.start();
     
        }
     
    }
    à comprendre ta réponse je dois rentrer dans ma première méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main( "/bin/sh", "-c", "bash /Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" );
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main(new String[] cmd = { "/bin/sh", "-c", "bash /Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" });

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par K2carca Voir le message
    voici le code de ma méthode EXECUTION. en effet elle fait appel a un shell.
    Ok. Mais ça n'a pas d'importance pour appeler sa méthode main(). En revanche, tu devrais regarder ProcessBuilder. C'est beaucoup plus simple que Runtime runtime = Runtime.getRuntime(); etc.
    Attention toutefois à ce que Runtime ou ProcessBuilder ne sont pas des simulateurs de shell (encore moins de bash).
    Attention aussi à bien découper la commande pour la mettre dans le tableau : on découpe suivant les espaces et chaque partie va dans une cellule du tableau.

    Citation Envoyé par K2carca Voir le message
    à comprendre ta réponse je dois rentrer dans ma première méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main( "/bin/sh", "-c", "bash /Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" );
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main(new String[] cmd = { "/bin/sh", "-c", "bash /Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" });
    Non : il n'y a aucun paramètre dans ta méthode main de Execution, donc c'est simplement :

    Si tu vais utilisé un paramètre par exemple pour le nom du sh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String... args) throws IOException {
            // TODO code application logic here
            Runtime runtime = Runtime.getRuntime();
    String[] cmd = { "/bin/sh", "-c", "bash", args[0] }; // args
    tu aurais pu écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Execution.main("/Users/moi/Desktop/concatenator\\ basic\\ 48h.sh");
    PS je m'interroge sur le \\ mais je ne connais pas assez linux/bash. Je ne connais pas cette notation en tout cas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Par défaut
    le \\ sers en unix pour indiquer les espaces car mon fichier s'appelle concatenator basic 48H

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par K2carca Voir le message
    le \\ sers en unix pour indiquer les espaces car mon fichier s'appelle concatenator basic 48H
    Ok. C'est parce que "/Users/moi/Desktop/concatenator basic 48h.sh" est un paramètre de bash qui est lancé via sh que tu dois échapper les espaces je suppose.

    Dans le tableau, chaque élément correspond à une sous partie de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] cmd = { "/bin/sh", "-c", "bash", "/Users/moi/Desktop/concatenator\\ basic\\ 48h.sh" };
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/04/2007, 11h56
  2. GC appel depuis une autre classe
    Par dark2 dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 09/06/2006, 05h53
  3. JProgressbar qui avance depuis une autre classe....
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/02/2006, 20h04
  4. [Débutant] Lancer procédure depuis une autre classe
    Par pugnator dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2005, 14h50
  5. Acces a un control depuis une autre classe
    Par schnito dans le forum MFC
    Réponses: 5
    Dernier message: 25/01/2004, 22h14

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