[Runtime]Taille de paramètre trop importante
Bonjour tout le monde.
Je cherche a éxécuter une application Java depuis une autre application Java.
J'ai donc mis en place tout le tuttim, depuis le bouton (qui est sensé lancer l'application tierce) jusqu'à son listener qui utilise la commande )]Runtime.exec(String[])
Je passe à mon application plusieurs paramètres dont un flux XML (sous forme de String).
Tout marche bien, SAUF si je mets des valeurs d'attributs (sous forme de String) trop grande dans mes balises XML.
En gros, j'ai une balise <attribute name="Comment" value="mon commentaire"/> qui se répète moult fois ans mon flux XML, et je n'ai pas le droit de mettre une chaine de plus de 16 caractères à la place de "mon commentaire", sans quoi je lève l'exception suivante :
Citation:
Envoyé par Exception levée
Unable to launch MySoft4 : IOError
java.io.IOException: CreateProcess: java -jar MySoft4.jar -s Logiciel -x <tree><declarations><attributeDecl name=\"name\" type=\"String\" />
<attributeDecl name=\"C: value\" type=\"Float\" />
<attributeDecl name=\"Comment\" type=\"String\" /></declarations>
<branch><attribute name=\"name\" value=\"Design\" /><branch>
<attribute name=\"name\" value=\"Documentation\" /><leaf>
<attribute name=\"name\" value=\"Emergency Response Plan (ERP) documentation available\" />
<attribute name=\"C: value\" value=\"0.0\" /><attribute name=\"Comment\" value=\"12345678901234567\" />
</leaf><leaf><attribute name=\"name\" value=\"HAZOP documentation available\" />
<attribute name=\"C: value\" value=\"100.0\" /><attribute name=\"Comment\" value=\"12345678901234567\" />
</leaf><leaf><attribute name=\"name\" value=\"HIPS documentation”
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at com.mySociety.logiciel.ButtonsListener.mouseClicked(ButtonsListener.java:62)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
et voici le code qui m'a servi pour faire ceci
Code:
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
| String param = XmlDocument.getXmlStreamForMySoft().replaceAll("\"", "\\\\\"").replaceAll(" "," ");
param=param.substring(param.indexOf("<tree>"));
String[] cmd={"java","-jar","MySoft4.jar", "-s", "Logiciel", "-x", param};
try{
Runtime r = Runtime.getRuntime();
r.traceInstructions(true);
r.traceMethodCalls(true);
final Process proc = r.exec(cmd);
((JFrame)mainFrame).dispose();
}catch (IOException e1){
System.out.println("Unable to launch MySoft4 : IOError");
e1.printStackTrace();
}catch (SecurityException e1){
System.out.println("Unable to launch MySoft4 : Security Exception");
e1.printStackTrace();
}catch (NullPointerException e1){
System.out.println("Unable to launch MySoft4 : Null pointer");
e1.printStackTrace();
}catch (IllegalArgumentException e1){
System.out.println("Unable to launch MySoft4 : Illegal argument");
e1.printStackTrace();
} |
Donc pour résumer, si jamais dans mon String "param", l'attribut dont le nom est Comment a une valeur de plus de 16 carctère, ça plante, sinon ça marche, et je ne sais pas pourquoi.
Y a t'il quelque chose à faire du côté du deuxième paramètre String[] envp, car je ne vois pas du tout ce que je pourrais mettre dedans...