1
Java 응용 프로그램 래퍼 역할을하는 C# 응용 프로그램을 만들려고합니다.ErrorDataReceived - 죽인 스레드를 처리하는 동안 NullReferenceException이 발생했습니다.
구현하려고하는 기능 중 하나는 콘솔 출력을 내 프로그램으로 리디렉션하는 것입니다. 불행히도 Java 프로세스를 중단하면 전체 프로그램이 정지됩니다. - 어쩌면 나는 아직 그것을 이해하지
private void button1_Click(object sender, EventArgs e)
{
String start = @"myjavaapp.jar";
var startInfo = new ProcessStartInfo("java", start);
startInfo.RedirectStandardInput = startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
Process ServerProc = new Process();
ServerProc.StartInfo = startInfo;
ServerProc.EnableRaisingEvents = true;
ServerProc.ErrorDataReceived += new DataReceivedEventHandler(ServerProc_ErrorDataReceived);
ServerProc.Exited += new EventHandler(ServerProc_Exited);
ServerProc.Start();
ServerProc.BeginErrorReadLine();
}
private void ServerProc_ErrorDataReceived(object sender, DataReceivedEventArgs e)
{
Invoke(new Action(() =>
{
if (e.Data.Contains("nastything"))
{
System.Windows.Forms.MessageBox.Show("Something nasty happened in console ");
}
f2.richTextBox1.AppendText(e.Data + "\n");
}));
}
내 스레드 관리에 문제가 있다고 생각 : 여기
는 코드입니다. 어쨌든, 디버그 모드에서 vs2012는NullReferenceException
을 반환합니다.
당신이 NullReferenceException을 리턴한다고 말할 때 - 어떤 라인에서 이것이 발생합니까? – Slugart
ServerProc_ErrorDataReceived에서 전체 호출 블록입니다. – jmwierzbicki
null, e는 무엇입니까? e.Data? – Slugart