java - 在 Windows 10 中运行 jar 文件的问题

标签 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 文件时,它停止工作。

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

我不知道是什么造成了这种情况。我将非常感谢任何建议。

最佳答案

您的代码: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/

相关文章:

windows - 在没有 Linux 服务器的 Windows 10 主机上的 Docker 容器中显示 GUI 应用程序

java - Java 如何从 HashMap 中获取对象

java - 在旧版本的 Java 中打开浏览器

java - IO 错误 : The Network Adapter could not establish the connection when running oracle DB as docker container

c# - DbMigration.AlterstoredProcedure( Entity Framework 迁移): How to represent type smallmoney?

c# - 为什么 StandardOutput.Read() 永远不会返回? (僵局?)

windows-10 - 如何从 Windows 10 (ubuntu) bash 启动 .exe 文件?

java - 从 Controller 测试的上下文中访问 ModelAndView 对象中包含的模型的属性

c# - 如何修改edmx的默认代码生成策略?

Powershell:将 AD MachineName/UserName/IPv4Address 导出到单个 *.csv