J'ai essayé beaucoup d'options différentes, mais rien ne semble fonctionner. Je ne peux pas obtenir mon code pour produire une chaîne à la "console" d'un processus. Voici mon code:BufferedWriter vers l'entrée ProcessBuilder?
Process p;
// Create new ProcessBuilder
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "jar-location").inheritIO();
// Change work directory
pb.directory(new File("other-location"));
// Redirect output
pb.redirectOutput(new File("C:\\xampp\\htdocs\\log.json"));
// Start ProcessBuilder
p = pb.start();
OutputStream stdin = p.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
while(!done) {
try {
if(go != null) {
writer.write(formatted[0])
}
Thread.sleep(1000);
}
catch(Exception err) {
System.out.println(err);
}
}
« p » est le processus que je suis en train de présenter à l'entrée et « formaté » est un tableau de données. Lorsque vous exécutez cela, rien ne se passe. J'ai essayé de rincer/fermer l'auteur, mais je ne peux pas l'obtenir dans un endroit sans obtenir "Java IO Exception: Stream Closed". Quelqu'un peut-il dire ce qui ne va pas avec mon code?
Stacktrace:
Exception in thread "main" java.io.IOException: Stream closed
at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433)
at java.io.OutputStream.write(OutputStream.java:116)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:316)
at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149)
at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233)
at java.io.BufferedWriter.close(BufferedWriter.java:266)
at com.Rocket_Scientist.Main.main(Main.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Veuillez poster la pile. Aussi, qu'est-ce que 'client'? –
J'ai attaché le stacktrace de quand il se bloque de writer.close(). Le client est juste une source de données pour le formatage, j'aurais probablement pu l'enlever de l'extrait. – user3149832
Que 'ProcessBuilder $ NullOutputStream' est révélateur. Modifiez votre question et affichez le code qui crée ProcessBuilder. De la documentation de ProcessBuilder: "une source d'entrée * standard. * Par défaut, le sous-processus lit l'entrée d'un tube. Le code Java peut accéder à ce canal via le flux de sortie renvoyé par 'Process.getOutputStream()'. Cependant, l'entrée standard peut être redirigée vers une autre source en utilisant 'redirectInput'. Dans ce cas, 'Process.getOutputStream()' retournera un flux de sortie * null, * pour lequel: les méthodes d'écriture lancent toujours IOException; la méthode close ne fait rien. " – VGR