Java.lang.RunTime : marche, mais pas vraiment [résolu] - Java - Programmation
Marsh Posté le 19-03-2003 à 12:58:02
alors?? pas d'idée??
si mon programme utilise des librairies, ai-je besoin de les charger, ou l'exécution du programme s'en charge?
Marsh Posté le 19-03-2003 à 15:09:31
bon je vais essayer de faire plus clair au cas où quelqu'un voudrais me répondre :
- imaginons que j'ai un exécutable (chuis sous linux) qui a besoin de librairies openGL => ai-je besoin de charger ces librairies dans le Runtime java ou pas??
quelqu'un connait-il un example complet d'utilisation de la classe Runtime?
Marsh Posté le 19-03-2003 à 17:37:36
ben sous windows, il y a des commandes que tu places dans exec, qui ne fonctionnent que si tu precedes ta commande de "cmd /c".
exemple:
Runtime.getRuntime("cmd /C " + commande_a_exec + " " + param1 + " " + param2 ...);
en fait, il semblerait que le exec ait besoin d'un environnement d'execution que exec ne fournit pas.
peut etre que sous linux c'est pareil, mais au lieu de cmd tu mets: "bash " ou "sh "
Marsh Posté le 19-03-2003 à 18:46:33
heu, normalement, Runtime.getRuntime().exec(ta comande), c bon, puisque le getruntime doit donner l'environnement d'axécution!
le problème est pas que mon programme ne s'exécute pas, c qu'il s'exécute pas correctement!!
mais merci qd même!
Marsh Posté le 19-03-2003 à 20:25:02
arghbis a écrit : heu, normalement, Runtime.getRuntime().exec(ta comande), c bon, puisque le getruntime doit donner l'environnement d'axécution! |
j'ai bien précisé que c'etait sous windows...
c'etait avec le JDK 1.2.2, peut etre qu'avec les nouvelles versions, ca n'est plus nécessaire...
en fait, ce n'est pas l'environnement qui manque mais un truc d'execution (genre move ne marche pas car il lui manque un truc)
c'est specifique windows...
Marsh Posté le 19-03-2003 à 21:00:46
la construction de la chaine que tu passes a ton shell, tu pourrais pas la faire encore peu plus tordue stp?
Marsh Posté le 19-03-2003 à 21:02:14
peut etre une histoire de var d'env (ou tu as notamment le path vers tes librairies) qui n'est pas initialisée dans ce cas... ou une histoire d'user (genre l'user avec lequel est lancé la jvm n'est pas celui que tu crois)
...
Marsh Posté le 19-03-2003 à 21:04:08
ben en fait, que je lance la jvm moi même ou pas, ça change rien (j'ai essayé pour voir). Ce que je me demande, c s'il faut renseigner l'instance Runtime sur les variables d'environnement qui ne concernent as java, ou si c directement accessible??
Marsh Posté le 19-03-2003 à 21:09:08
arghbis a écrit : ben en fait, que je lance la jvm moi même ou pas, ça change rien (j'ai essayé pour voir). Ce que je me demande, c s'il faut renseigner l'instance Runtime sur les variables d'environnement qui ne concernent as java, ou si c directement accessible?? |
ben fait systemachin.exec("echo $LAVARIABLEDONTTUASEVENTUELLEMENTBESOIN" )
au fait t'as tenté de recuper les output de ton exec, des fois qu'il y aurait un msg d'erreur que tu vois pas?
et puis si au lieu de "ça marche pas pareil" tu etais plus précis ça t'aiderait peut etre a trouver le probleme
Marsh Posté le 19-03-2003 à 21:13:00
ben le problème est justement là!
les messages disent que tout c bien passé, mais moi je vois bien que non!
la classe java lance un prog qui prends un fichier en entrée et génère une image en sortie. et ben l'image générée par la commande par java n'est pas la même (pas la bonne) que celle générée par la même commande en shell.
les stacktrace ne disent rien, et le code de sortie est 0 (ok, donc!)
comprends plus rien moi!!
Marsh Posté le 19-03-2003 à 21:16:12
bah et t sur que tu lui files le bon fichier en entrée...?
genere ta commande plus proprement et affiche là avant de l'executer pour voir
Marsh Posté le 19-03-2003 à 21:17:32
merci, mais c déjà ce que je fais!! chuis pas trop une buse qd même!!
les fichiers sont identiques et la commande est identique!!
c hallucinant!
Marsh Posté le 19-03-2003 à 21:19:34
forcément que non
sinon fais un truc genre sys.exec("set" ) ou export
et mate si les variables sont bien settées
Marsh Posté le 19-03-2003 à 21:39:46
ouaip, je crois que c ce que je vais faire dès demain, au boulot!!!
merci pour ton aide
Marsh Posté le 20-03-2003 à 01:11:35
arghbis a écrit : les messages disent que tout c bien passé, mais moi je vois bien que non! |
IMHO rien a voir avec Runtime.exec()...
S'il te génere une image c'est que tout s'est bien passe... si ce n'est pas la bonne c'est que tu lui passe de mauvais arguments. Il ne va pas te creer la mauvaise image juste pour t'embeter.
Et que signifie "pas la bonne" ? Il t'en génere une ou non ?
Bref...
Citation : |
Tu les prends d'ou tulipFilePath et aTulipFileName (ton input et ton output) ? tu ne les aurais pas codes en dur quelque part par hasard ?
pour verifier code en dur le chemin du tlp que tu veux rendre et le chemin de l'output directement dans ton exec... si ca marche c'est que tu as merdouille quelque part.
Marsh Posté le 20-03-2003 à 08:51:32
c ce que j'ai déjà dit plus haut! je l'ai codée en dur ma commande pour essayer, et c pour ça que je dit "ça marche, mais pas vraiment"!
je pense qu"au cours du programme, il a besoin d'une lib que java ne charge pas, c pour ça qu'il génère une image, mais vide (la génération de l'image et la génération de son contenu ne font pas appel à la même lib)
Marsh Posté le 01-04-2003 à 14:58:30
je remonte mon topic, car j'ai du nouveau : je pense savoir d'où vient l'erreur, mais je n'arrive pas à la résoudre!
Code :
|
dans la ligne en gras, si j'enlève les doubles quotes protégées (\" ) et que le paramètre aLayout est un String ne contenant pas d'espace (par exemple macin au lieu de machin bidule) ça marche.
j'ai remarqué dans les tokens utilisés par la commande exec, qu'il me mettait deux tokens différent si je mets machin bidule! comment éviter celà??
remercie encore!
--edit-- mince, la ligne n'apparait pas en gras, j'ai que les balises! chuis pas doué qd même!!
Marsh Posté le 01-04-2003 à 15:16:17
essaie de remplacer tes " par des ' genre au lieu de
"tadirladada -yadu \"soleil\" -etdes \"nanas\" "
tu mets
"tadirladada -yadu 'soleil' -etdes 'nanas' "
ca fait quoi ? (et cette fois ci essaie avant de me dire que ca marche pas)
Marsh Posté le 01-04-2003 à 15:24:57
heu ben désolé, mais je l'avais déjà tenté ça!! (promis juré!! )
ça marche toujours pas!
Marsh Posté le 01-04-2003 à 16:10:23
de plus en plus fort!
exemple
Code :
|
marche pas!
Code :
|
marche pas non plus!
Code :
|
marche!
soit y'a un concept java que je ne connais pas et qui explique ça, soit je suis maudit! si vous plait, me dites pas que j'ai besoin d'être désenvouté!
Marsh Posté le 01-04-2003 à 16:22:40
bon je continue à me répondre tout seul! je pense savoir d'où vient l'erreur!
la méthode exec prends en argument un String, qu'elle fait passer dans un StringTokenizer pour récupérer les différents tokens. Le problème est que par défaut, le constructeur de StringTokenizer ne renvoie pas les séparateurs de chaine (ici les espaces) en tant que token, et je ne vois pas de moyen de spécifier ça à exec!
dois-je réécrire ces méthodes?? est-ce simple ou y-a-t-il une astuce??
help
Marsh Posté le 01-04-2003 à 17:15:07
vous pensez que ça mérite un bug/feature report ou pas?? c qd même bizarre non?
Marsh Posté le 01-04-2003 à 17:19:25
edit : plonk...
Marsh Posté le 01-04-2003 à 17:27:46
arghbis a écrit : hein? ça veut dire koi? |
ça veut dire que comme d'hab, j'ai posté une réponse en ayant lu que la moitié du thread et que je suis tombé à côté de la plaque... sorry.
Du coup j'ai relu le thread en entier. Mais là, tout de suite, je n'ai pas d'idée.
Marsh Posté le 01-04-2003 à 17:30:32
ah ok! mais en fait, j'avais pas vu ta première réponse!
alors, personne??
juste une idée comme ça: si je crée une classe qui implémente Runtime et que je redéfini juste la méthode exec pour faire ce que je veux, vous pensez que c jouable?
Marsh Posté le 08-04-2003 à 19:18:26
bon, j'ai résolu mon problème :
au lieu d'utiliser la méthode exec(String command) de la classe Runtime, j'utilise la méthode exec(String [] commandarray).
bon vous pourrez objecter que vous l'avez déjà dit (et je l'avais déjà essayé), mais il y a une subtilité non documenté.
explication :
le programme que je veux lancer par java se lance ainsi en ligne de commande sous linux: monprogramme --monOption="Une option bizarre"
il y a des doubles quotes pour protéger les espaces entre les termes.
En java, avec commandarray, ben faut pas mettre ces quotes!
ex : String [] command = {"macommande", "--monOption=Une option bizarre"};
et zou! ça roule!!
merci la doc java et ça manière bizarre de faire les choses!!
Marsh Posté le 19-03-2003 à 10:50:32
salut tout le monde!
ayant besoin d'exécuter un programme externe dans une de mes classes java, je me suis dit que j'allais utiliser la classe RunTime de l'api java. Bon, ça me lance mon prog, mais pas tout à fait : il ne me donne pas le même résultat que si je tape la ligne de commande dans mon shell!
y'a-t-il une histoire d'importation de librairie qu'il faut faire ou autre?? je n'arrive pas à trouver d'exemples complets!!
au cas où, voici mon code :
merci!
Message édité par arghbis le 08-04-2003 à 19:18:47