如何从C#编译Java?

时间:2011-09-19 21:18:12

标签: c# java

我正在尝试使用以下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时,其中没有文件。

2 个答案:

答案 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#运行它。