windows10 中的 运行 jar 文件有问题

Problem with running jar file in windows10

我有一个 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 文件时,它停止工作。

这不是目录的问题,我仔细检查了它们。

我不知道是什么导致了这种情况。我真的很感激任何建议。

检查以下内容:

  1. 您的程序调用的 .jar 文件是否驻留在您将程序移动到的计算机上?如果您需要从远程服务器访问 .jar 文件,则不能使用该进程 class。

  2. 当你说它时 "stops working" 它会抛出错误吗?

  3. 您是否检查过 java 是否安装在您将程序移动到的计算机上(运行 java -命令行中的版本)?

您的代码: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(不是标记为 已接受 的那个)应该有效。
  • 如果您不反对 运行使用 Internet 上随机陌生人制作的第三方工具,jarfix 将自动执行上述手动方式。

选项 2

使您的程序触发 Java,即使它当前未与 jar 文件相关联。 这可能会使 运行 在更多计算机上运行,​​但不会解决您的 jar 双击问题。

这需要 Java 已经安装并且在您的 OS 的路径中。要对此进行测试,请启动命令提示符,然后 运行 java -version。如果您收到回复,请继续阅读。如果不这样做,则需要查找如何在 PATH 中包含 Java。

现在,在您的 StartInfo 中,您想直接调用 java 而不是您的 jarfile:

proc.StartInfo.FileName = "java";

然后将您的 jar 指定为参数的一部分:

proc.StartInfo.Arguments = " -jar " + jarName + " " + ...the rest of your args.

您可以将 "java" 替换为 "javaw" 如果您知道您只会在 Windows 上 运行 它。