2016-05-10 6 views
2

これは理解しにくいかもしれませんが、ですが、コンソールC#アプリケーションでJavaアプリケーションの出力を取得したいとします。javaアプリケーションの出力を取得するC#

C#コンソールアプリケーションでProcess.Startを使用してJavaアプリケーションを起動すると、javaアプリケーションが制御を引き継ぎ、すべての行がSystem.Out.Println()を使用して書き込まれます。

は、私はJavaアプリケーションを起動したい、それはそうのSystem.out.println()は、変数に格納されていない印刷した後、変数はConsole.WriteLineを()であるものを転載します

を許可します私は言い換える。#1 java appをprocess.startを使ってC#console appで起動します。 #2 System.out.prinln()で出力しようとしていたものを出力し、その代わりに変数/文字列に格納するjavaの試行を取り消します。 #3は、Console.WriteLine()を使用してその文字列を再印刷します。

標準出力をリダイレクトすることができません。

あなたが疑問に思っているのは、これはminecraft bukkitです。

+0

https://msdn.microsoft.com /en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput%28v=vs.110%29.aspxには例があります –

+0

lashaneは何を言ったのですか...名前付きパイプ、TCP/IP、ファイルシステム、メールスロットなど – Tdorno

+0

@Lashaneリダイレクト標準出力は私が期待している結果をもたらさない。それは動作しません。 – halpme142

答えて

2

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、次のC#アプリケーション(CaptureProcessStdOutErr.exe)

実行CaptureProcessStdOutErr.exeにJavaApplication.classファイルを置く

出力:

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

Captured stdout from java process 
Java application outputs something into stdout 
関連する問題