在Windows10中运行jar文件的问题

时间:2019-10-10 18:11:48

标签: java c# windows-10 executable-jar

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

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

我不知道造成这种情况的原因。我会很感激任何建议。

2 个答案:

答案 0 :(得分:1)

检查以下内容:

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

  2. 当您说它“停止工作”时,它是否会引发错误?

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

答案 1 :(得分:1)

您的代码: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,即使该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"