真的需要帮助!我想知道如何在VB2008中把jar输出放到一个文本框中。此外,我想向它发送命令(就像CMD在使用此命令时一样:C: \Windows\System32\java.exe-Xms128M-Xmx1024M-jar Craftbukkit.jar)
下面是概念验证。你必须根据自己的欲望和愿望来调整它。它的作用:
- 在后台启动进程
- 开始读取输出和错误流
- 您可以通过文本框(和单击按钮)发送命令
- 在输出文本框中写入输出/错误
同样,这段代码只是概念的证明,它还远远没有完成(但它已经证明了足够多)。你必须加一些额外的格子等使它"防水"。
Public Class MyForm
Private WithEvents _CmdProcess As Process
Private Delegate Sub DisplayTextDelegate(text As String)
Private Sub MyForm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim processInfo As New ProcessStartInfo()
processInfo.FileName = "cmd"
processInfo.RedirectStandardError = True
processInfo.RedirectStandardInput = True
processInfo.RedirectStandardOutput = True
processInfo.UseShellExecute = False
processInfo.CreateNoWindow = True
_CmdProcess = Process.Start(processInfo)
_CmdProcess.BeginOutputReadLine()
_CmdProcess.BeginErrorReadLine()
End Sub
Private Sub MyForm_Disposed(sender As System.Object, e As System.EventArgs) Handles MyBase.Disposed
If _CmdProcess IsNot Nothing Then
_CmdProcess.Close()
End If
_CmdProcess = Nothing
End Sub
Private Sub btnExecute_Click(sender As System.Object, e As System.EventArgs) Handles btnExecute.Click
If Not String.IsNullOrWhiteSpace(txtCommand.Text) Then
Dim inputStream As System.IO.StreamWriter = _CmdProcess.StandardInput
inputStream.WriteLine(txtCommand.Text)
inputStream.Flush()
End If
End Sub
Private Sub CmdProcess_ErrorDataReceived(sender As System.Object, e As System.Diagnostics.DataReceivedEventArgs) Handles _CmdProcess.ErrorDataReceived
Invoke(New DisplayTextDelegate(AddressOf DisplayText), Environment.NewLine)
Invoke(New DisplayTextDelegate(AddressOf DisplayText), "Error!")
Invoke(New DisplayTextDelegate(AddressOf DisplayText), e.Data)
End Sub
Private Sub CmdProcess_OutputDataReceived(sender As System.Object, e As System.Diagnostics.DataReceivedEventArgs) Handles _CmdProcess.OutputDataReceived
Invoke(New DisplayTextDelegate(AddressOf DisplayText), e.Data)
End Sub
Private Sub DisplayText(text As String)
txtOutput.AppendText(Environment.NewLine)
txtOutput.AppendText(text)
End Sub
End Class