Reputation: 39
This may be hard to understand, but I want to get the output of a java application in a console C# app.
When you start a java application with Process.Start in a C# console app, the java application takes control, and all lines are written using System.Out.Println().
I want to start a java application, make it so System.out.println() gets stored in a variable and not printed, and then reprint what the variable is with Console.WriteLine()
Allow me to rephrase. #1 Start java app in c# console app with process.start. #2 Cancel java's attempts to output what it was going to output with System.out.prinln(), and instead store it in a variable/string. #3 reprint that string using Console.WriteLine().
Redirecting standard output does not work for this.
If you are wondering, this is for minecraft bukkit.
Upvotes: 3
Views: 2401
Reputation: 172
Java application:
public class JavaApplication {
public static void main(String[] args) {
System.out.println("Java application outputs something into stdout");
System.err.println("Java application outputs something into stderr");
}
}
C# application
using System;
using System.Diagnostics;
namespace CaptureProcessStdOutErr
{
public class Program
{
public static void Main(string[] args)
{
var startInfo = new ProcessStartInfo("java", "JavaApplication") // proper path to java, main java class, classpath, jvm parameters, etc must be specified or use java -jar jarName.jar if packaged into a single jar
{
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false
};
var process = Process.Start(startInfo);
process.WaitForExit();
Console.WriteLine("Captured stderr from java process:");
Console.WriteLine(process.StandardError.ReadToEnd());
Console.WriteLine();
Console.WriteLine("Captured stdout from java process");
Console.WriteLine(process.StandardOutput.ReadToEnd());
}
}
}
This assumes java.exe is in the PATH.
Compile JavaApplication and put JavaApplication.class file next to C# application (CaptureProcessStdOutErr.exe)
run CaptureProcessStdOutErr.exe
Output:
Captured stderr from java process:
Java application outputs something into stderr
Captured stdout from java process
Java application outputs something into stdout
Upvotes: 4