C#调用java.exe并从cmd得到错误的结果

本文关键字:错误 结果 cmd 调用 java exe 并从 | 更新日期: 2023-09-27 18:28:41

我想使用C#进程从命令提示符中获取结果。命令是"javaHelloWorld1"(我一直在使用"javacHelloWorld.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#代码:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = "C:''Program Files''Java''jdk1.6.0_25''bin''java.exe";
    p.StartInfo.Arguments = "HelloWorld 1";
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.Start();
    string strOutput = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

但是strOutput是"。你能给我解决办法吗?非常感谢。

C#调用java.exe并从cmd得到错误的结果

最有可能的情况是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是一个Process对象。WorkingDirectoryProcessStartInfo 的一个性质

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