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 文件时,它停止工作。
这不是目录的问题,我仔细检查了它们。
我不知道是什么导致了这种情况。我真的很感激任何建议。
检查以下内容:
您的程序调用的 .jar 文件是否驻留在您将程序移动到的计算机上?如果您需要从远程服务器访问 .jar 文件,则不能使用该进程 class。
当你说它时 "stops working" 它会抛出错误吗?
您是否检查过 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 上 运行 它。
我有一个 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 文件时,它停止工作。
这不是目录的问题,我仔细检查了它们。
我不知道是什么导致了这种情况。我真的很感激任何建议。
检查以下内容:
您的程序调用的 .jar 文件是否驻留在您将程序移动到的计算机上?如果您需要从远程服务器访问 .jar 文件,则不能使用该进程 class。
当你说它时 "stops working" 它会抛出错误吗?
您是否检查过 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 上 运行 它。