Arguments pour la fonction .Runtime ()

Fermé
Nirdaven Messages postés 3 Date d'inscription jeudi 16 mai 2013 Statut Membre Dernière intervention 13 juin 2013 - 13 juin 2013 à 17:41
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 13 juin 2013 à 18:40
Bonjour,

J'ai un énorme problème avec la fonction Runtime, comme l'indique le titre, mes arguments ne passent pas...

Voila mon code qui pose problème :

String mdp = new String(fenetre.texte3.getPassword());
			String login = fenetre.texte2.getText();
			String mdp = new String(fenetre.texte3.getPassword());
			String ligne;
			Runtime rt = Runtime.getRuntime();
			try {
				Process process;
				process = rt.exec(new String[] { "perl", "connexion.pl ", login, mdp });
				System.out.println(bdd + login + mdp);
			} catch (IOException ioe) {
				System.out.println(ioe);
			}


La fonction connexion.pl sert juste a dire si les identifiants sont en accords avec ceux présents dans une base de données. Or il s'avère que le runtime ainsi appelé ne prend pas en compte les arguments. J'ai cherché sur le net et on dit a chaque fois de faire :
Runtime runtime = Runtime.getRuntime();
runtime.exec(new String[] { "monappli", "param1", "param2" } );

or dans mon cas les doubles quotes desserviraient mes intentions...
j'ai essayé différentes façons :
- en enlevant "perl", et "connexion.pl " pour mettre "perl connexion.pl " (comme je m'y attendais, ça ne marche pas)
- en mettant des "+" au lieux des ",". Même constat que précédemment.

auriez-vous une idée de comment faire ?

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
13 juin 2013 à 18:40
Normalement, ton code devrait fonctionner et les espaces n'ont aucune incidence sur l'ordre des arguments, seuls la case du tableau indique l'ordre de l'élément.

Voici un exemple d'un programme "Test" qui s'appelle lui même :

import java.io.IOException;
import java.util.Scanner;

public class Test
{
    public static void main(String[] args) throws IOException, InterruptedException
    {
        if (args.length==0)
        {
            Process p = Runtime.getRuntime().exec(new String[] {"java", "Test", "arg1", "arg2 arg3"});

            System.out.println(p.waitFor());
            
            Scanner out = new Scanner(p.getInputStream());
            while (out.hasNextLine())
                System.out.println(out.nextLine());
            out.close();
            
            Scanner err = new Scanner(p.getErrorStream());
            while (err.hasNextLine())
                System.out.println(err.nextLine());
            err.close();            
        }
        else
        {
            for (String arg : args)
                System.out.println(arg);
        }
    }
}

Voici un exemple d'exécution :

$ java Test a b
a
b

$ java Test
0
arg1
arg2 arg3
0