我有一个Java项目,将其转换为jar文件。然后,我的C#项目正在使用具有此代码的jar文件
proc = new Process();
proc.StartInfo.WorkingDirectory = jarDir;
Console.WriteLine("\nDirectory with jar file is\n" + jarDir);
proc.StartInfo.FileName = jarName;
Console.WriteLine("\npassed arguments are" + ifs_id.ToString() + " " + max_record.ToString() + " " + max_time.ToString() +
" " + outputName + " " + outputDir);
proc.StartInfo.Arguments = " " + ifs_id.ToString() + " " + max_record.ToString() + " " + max_time.ToString() +
" " + outputName + " " + outputDir;
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(OnProcessExit);
proc.Start();
一切都很好。 当我将项目转移到其他计算机(也可以在Windows10下工作)时,问题开始了。 它的工作。流程开始,并立即完成。 而且,我无法通过双击运行jar文件,我认为可能是这种情况。 在开发代码时,一切都可以完美运行。但是,当我将项目转换为.jar文件时,它将停止工作。
这不是目录的问题,我仔细检查了一下。
我不知道造成这种情况的原因。我会很感激任何建议。
答案 0 :(得分:1)
检查以下内容:
程序调用的.jar文件是否驻留在将程序移至的计算机上?如果需要从远程服务器访问.jar文件,则不能使用该Process类。
当您说它“停止工作”时,它是否会引发错误?
您是否检查了将程序移动到的计算机上是否安装了Java(在命令行中运行java -version)?
答案 1 :(得分:1)
您的代码:proc.StartInfo.FileName = jarName;
告诉Windows使用jar文件处理程序关联的任何文件运行.jar文件。与双击相同。
因此,这两种方法均未运行,这意味着Windows上的Java运行时不是jarfile的注册处理程序。根据您安装的JRE风格,大多数Open JRE安装程序都不会这样做。我认为今年某个时候,AdoptOpenJDK已经开始在安装程序中包含jarfile处理选项。
修复jar文件关联。这样可以使其在您的另一台计算机上运行,但是您需要在每台出现相同问题的其他计算机上运行它。
从好的方面来说,这也可以修复双击jar上的问题,而下面的选项2则不行。
您可以选择以下几种方法:
使您的程序触发Java,即使该Java当前未与jarfile关联。 这可能会使它在更多计算机上运行,但无法解决jar双击问题。
这需要已安装Java,并且该Java位于操作系统的PATH中。要对此进行测试,请启动命令提示符,然后运行java -version
。如果您得到回应,请继续阅读。如果没有,则需要查找如何在PATH中包含Java。
现在,在您的StartInfo
中,您要直接调用java
而不是jar文件:
proc.StartInfo.FileName = "java";
然后您将jar指定为参数的一部分:
proc.StartInfo.Arguments = " -jar " + jarName + " " + ...the rest of your args.
如果知道只在Windows上运行,可以将"java"
替换为"javaw"
。