我正在尝试使用以下C#代码使用javac编译Java:
Process p = new Process();
p.StartInfo.FileName = "javac";
Directory.CreateDirectory(Application.StartupPath + @"/TempJava");
p.StartInfo.Arguments = "-d "Application.StartupPath + @"/TempJava" + files;
p.Start();
“files”表示包含*.java
文件名称的字符串变量。
总而言之,我想创建一个新文件夹,然后获取Java文件(从它们可能位于的位置)并将其编译为TempJava中的类文件。
由于某种原因,代码不起作用,没有错误,没有警告,但是当我运行它并检查TempJava时,其中没有文件。
答案 0 :(得分:2)
仅仅因为您的子进程以可能的错误结束,这并不意味着您的父进程必须知道它。
检查进程的退出代码和标准输出流,尤其是标准错误流。你的答案就在那里......
答案 1 :(得分:0)
这里我有两个按钮运行,这里编译是一些帮助的代码。
private void comp_Click(object sender, EventArgs e)
{
string text = "javac " + label1.Text + file + "@pause" + "@stop";
text = text.Replace("@", System.Environment.NewLine);
File.WriteAllText(label1.Text + "Compile.bat", text);
Process proc = null;
try
{
proc = new Process();
proc.StartInfo.FileName = label1.Text + "Compile.bat";
proc.StartInfo.CreateNoWindow = false;
proc.Start();
proc.WaitForExit();
}
catch
{
}
}
private void runp_Click(object sender, EventArgs e)
{
string news = file.Remove(file.Length - 5);
string text = "java " + news + "@pause";
text = text.Replace("@", System.Environment.NewLine);
File.WriteAllText(label1.Text + "Run.bat", text);
Process proc = null;
try
{
proc = new Process();
proc.StartInfo.FileName = label1.Text + "Run.bat";
proc.StartInfo.WorkingDirectory = label1.Text.Remove(label1.Text.Length - 1);
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
}
catch
{
}
}
我真正做的就是创建一个批处理并使用c#运行它。