C#调用java.exe并从cmd获取错误结果

C#调用java.exe并从cmd获取错误结果,c#,java,console,C#,Java,Console,我想使用C#进程从命令提示符获取结果。命令是“java HelloWorld 1”(我已经使用“javac HelloWorld.java”将其构建到HelloWorld.class文件中) java代码: public class HelloWorld { public HelloWorld() {} public static void main(String[] args) { System.out.println("STARTED"); try

我想使用C#进程从命令提示符获取结果。命令是“java HelloWorld 1”(我已经使用“javac HelloWorld.java”将其构建到HelloWorld.class文件中)

java代码:

public class HelloWorld {

    public HelloWorld() {}

    public static void main(String[] args) {    System.out.println("STARTED");
        try {
            int param = Integer.parseInt(args[0].toString());
            if (param == 1) {
                System.out.println("BASE 64!");
            } else if (param == 2) {
                System.out.println("MD5!");
            } else {
                System.out.println("INPUT NOT MATCH!");
            }
        } catch (Exception ee) {
            System.out.println("NO INPUT - ERROR");
        }
    } }
C#代码:

但是strOutput是“”。 你能给我答案吗?
谢谢大家!

最可能的情况是java找不到您的
HelloWorld.class
文件

在这种情况下,它将写入标准错误

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
然后是堆栈跟踪

它不会向标准输出写入任何内容

我建议你做两件事:

1) 阅读标准错误,看看它是怎么说的

2) 在类文件之前添加类路径参数

 p.StartInfo.Arguments = " -cp C:\\code\\myapp HelloWorld 1";

(显然,替换为包含HelloWorld.class的文件夹的正确路径)

另一种选择是将进程开始信息设置为HelloWorld的位置:

ProcessStartInfo pInfo = new ProcessStartInfo(@"C:\Program Files\Java\jdk1.6.0_25\bin\java.exe");
pInfo.Arguments = = "HelloWorld";
pInfo.WorkingDirectory = @"C:\JavaFiles";
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;

Process javaProc = Process.Start(pInfo);
string output = javaProc.StandarOutput.ReadToEnd();
编辑:我刚刚意识到你的
p
是一个过程对象
WorkingDirectory
ProcessStartInfo


这是假设C:\JavaFiles\HelloWorld.class和C:\JavaFiles\HelloWorld.java存在。您还应该遵循Greg的建议并阅读StandardError,因为它将帮助您解决未来的问题

我使用cmd“javac HelloWorld.java”构建HelloWorld.class,并更改代码,如:p.StartInfo.FileName=“C:\\Program Files\\java\\jdk1.6.0\u 25\\bin\\java.exe”;p、 StartInfo.Arguments=“-cp C:\\Program Files\\Java\\jdk1.6.0\\u 25\\bin\\HelloWorld 1”;但它不在C:\\Program Files\\Java\\jdk1.6.0\U 25\\bin\\中运行HelloWorld.class?cp选项需要指向类文件所在的位置。@QuangVinh类路径不应指向可执行文件(java.exe),而应指向已编译java代码的位置。在HelloWorld的路径中,我添加了代码“p.StartInfo.WorkingDirectory”,因此它可以正常工作。非常感谢。谢谢你,董,我没有p.StartInfo.WorkingDirectory,所以它不工作。你是越南人吗?给我你的雅虎成为朋友:)
ProcessStartInfo pInfo = new ProcessStartInfo(@"C:\Program Files\Java\jdk1.6.0_25\bin\java.exe");
pInfo.Arguments = = "HelloWorld";
pInfo.WorkingDirectory = @"C:\JavaFiles";
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;

Process javaProc = Process.Start(pInfo);
string output = javaProc.StandarOutput.ReadToEnd();