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是"。你能给我解决办法吗?非常感谢。
最有可能的情况是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对象。WorkingDirectory
是ProcessStartInfo
的一个性质
这是假设C:''JavaFiles''HelloWorld.class和C:''JavaFiles''HelloWorld.java存在。您还应该遵循Greg的建议并阅读StandardError,因为它将帮助您解决未来的问题