我有一个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 文件时,它停止工作。
这不是目录的问题,我仔细检查了它们。
我不知道是什么造成了这种情况。我将非常感谢任何建议。
最佳答案
您的代码:proc.StartInfo.FileName = jarName;
告诉 Windows 使用与 jar 文件处理程序关联的任何内容来运行 .jar 文件。与双击相同。
因此,这两种方法都不运行的事实意味着 Windows 上的 Java 运行时不是 jarfile 的注册处理程序。根据您安装的 JRE 风格,大多数 Open JRE 安装程序不会执行此操作。 AdoptOpenJDK 已经开始将 jarfile 处理选项包含到安装程序中,我想今年某个时候(?)。
<小时/>选项 1
修复 jar 文件关联。这应该可以使其在您的其他计算机上正常工作,但您需要在有相同问题的所有其他计算机上执行此操作。
好的一面是,这也将修复双击 jar 的问题,而下面的选项 2 则无法做到这一点。
您有几种选择来执行此操作:
- 使用可以为您完成此操作的 JRE/JDK 安装程序(例如 AdoptOpenJDK 的安装程序)。
- 手动执行。 This particular answer (不是标记为已接受的)应该有效。
- 如果您不反对运行互联网上随机陌生人制作的第三方工具,jarfix将使上述手动方式自动化。
选项 2
让您的程序触发 Java,即使它当前未与 jarfile 关联。 这可能会使其在更多计算机上运行,但不会解决 jar 双击问题。
这需要已安装 Java 并且位于操作系统的路径中。要对此进行测试,请启动命令提示符,然后运行 java -version
。如果您得到回复,请继续阅读。如果不这样做,您需要了解如何将 Java 包含在您的 PATH 中。
现在,在您的 StartInfo
中,您想要调用 java
而不是直接调用您的 jarfile:
proc.StartInfo.FileName = "java";
然后您将 jar 指定为参数的一部分:
proc.StartInfo.Arguments = " -jar " + jarName + " " + ...the rest of your args.
如果您知道只能在 Windows 上运行它,则可以将 "java"
替换为 "javaw"
。
关于java - 在 Windows 10 中运行 jar 文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58328821/