C#调用java.exe并从cmd获取错误结果
我想使用C#进程从命令提示符获取结果。命令是“java HelloWorld 1”(我已经使用“javac HelloWorld.java”将其构建到HelloWorld.class文件中) java代码: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
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();