获取java应用程序的输出C#

时间:2016-05-10 22:33:04

标签: java c#

这可能很难理解,但我希望在控制台C#app中获得java应用程序的输出。

当您在C#控制台应用程序中使用Process.Start启动Java应用程序时,Java应用程序将获得控制权,并且所有行都使用System.Out.Println()编写。

我想启动一个java应用程序,使它成为System.out.println()存储在变量中而不打印,然后使用Console.WriteLine()

重新打印变量

允许我改写。#1使用process.start在c#console app中启动java app。 #2取消java尝试输出使用System.out.prinln()输出的内容,而不是将其存储在变量/字符串中。 #3使用Console.WriteLine()重新打印该字符串。

重定向标准输出不适用于此。

如果你想知道,这是为了我的世界bukkit。

1 个答案:

答案 0 :(得分:3)

Java应用程序:

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#应用程序

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());
    }
  }
}

这假设java.exe在PATH中。

编译JavaApplication并将JavaApplication.class文件放在C#应用程序旁边(CaptureProcessStdOutErr.exe)

运行CaptureProcessStdOutErr.exe

输出:

Captured stderr from java process:
Java application outputs something into stderr

Captured stdout from java process
Java application outputs something into stdout