如何通过双击打开终端使我的 jar 文件可执行

How to make my jar file executable by double click to open terminal

好吧,基本上,每次我看到这个问题时,它都没有我正在寻找的答案,这就是为什么我要问自己的原因。

基本上,我在 BlueJ 上做了一个 java 项目(学校要求,很遗憾。但如果有问题,我可以将它导出到其他地方(最好是 IntelliJ 或 Visual Studio Code)),但本质上,我想做到这一点,这样我就可以简单地双击我的 .jar 导出,它将打开一个终端 window 并启动。但是,当我尝试此操作时,出现此错误:First Error

当我点击确定时,会出现: Second Error

现在,如果我想让 jar 在终端上 运行,那么 java -jar jarFileName.jar 就可以完美运行,但我想要的是当我双击 jar 文件时发生这种情况;让它从终端启动并运行。

我看到的关于这个问题的所有其他答案都归咎于用户的计算机,并且通常告诉他们安装某个版本的 java 或其他任何版本,但这不是问题所在。我还有其他 jar 文件,我可以 运行 非常好,比如 Minecraft Forge 安装程序或 Minecraft Spigot 安装程序(抱歉,只有 Minecraft 的例子,没有多少其他使用 Java)。而且这是针对 uni 项目的,我所在领域的其他人都不知道如何让他们的 jar 可执行,这个文件也不适用于其他任何人。

所以是的,我知道这是 jar 的编译方式或其他问题,而不是 java 我的 PC 安装了什么。

我只是想让它可以双击以方便我将它发送给朋友时,但是如果有人知道我可以通过其他方式解决这个问题,那很好。例如,我知道我可以制作一个 Bash 文件,它只为我或其他人做 java -jar jarFileName.jar,但我宁愿将它全部作为一个 jar 文件,所以我不知道这是否可以被合并到文件中但是是的。

另外,我真的很想要一个不涉及下载外部程序或其他任何东西的解决方案,因为我只想将此文件发送给我的朋友,让他们只需双击即可启动。

TL;DR,我需要做什么才能通过双击使我的 jar 文件真正可执行。谢谢。

要使 jar 文件可执行,您必须设置 entrypoint

您可以通过在创建 jar 文件时将 e 选项传递给 jar 命令来执行此操作,例如:

jar cvfe myapp.jar com.mycompany.myapp.MyApp com\mycompany\myapp

这里会添加Main-Class entry in the jar's manifest指向启动class,里面应该有一个main方法,例如:

package com.mycompany.myapp;

public class MyApp {
    public static void main(String[] args) { 
        // start up the application
    }
}

当您创建 JAR 文件时,它会自动接收默认值 manifest file。一个档案中只能有一个清单文件,并且它的路径名总是

META-INF/MANIFEST.MF

入口点由Main-Class指定,例如:

Manifest-Version: 1.0
Created-By: 1.8.13_37 (Oracle Corporation)
Main-Class: com.mycompany.myapp.MyApp

如果你想使现有的 jar 文件可执行,你可以解压缩它,修改清单并再次压缩它(并重命名它使其具有 .jar 扩展名 - jar 只是一个 zip)。

但我认为你显示的错误不是由 jar 不可执行引起的,而是由于某些环境问题导致 Java 应用程序找不到必要的变量或路径来使 Java 本机集成 (JNI) 工作。要解决此问题,您必须提供有关您尝试使用 JNI 执行的操作的更多详细信息。