Java macOS通过双击启动jar文件

Java macOS通过双击启动jar文件,java,macos,jar,Java,Macos,Jar,我有一个可执行的jar文件,它通过以下命令在macOS系统上正常运行: java -jar Hello.jar 然而,当我试图双击它时,它会暂停,然后最终显示一个弹出对话框,上面写着 无法启动Java JAR文件“Hello.JAR”。检查控制台是否存在可能的错误或消息 我在网上搜索了很多,所有的建议都是从shell脚本调用java或将jar文件包装成本地可执行文件的明显解决方案。对于这个特定的问题,我想将讨论限制在如何通过双击jar文件在macOS上执行jar文件上 在不修改jar文件的情况

我有一个可执行的jar文件,它通过以下命令在macOS系统上正常运行:

java -jar Hello.jar
然而,当我试图双击它时,它会暂停,然后最终显示一个弹出对话框,上面写着

无法启动Java JAR文件“Hello.JAR”。检查控制台是否存在可能的错误或消息

我在网上搜索了很多,所有的建议都是从shell脚本调用java或将jar文件包装成本地可执行文件的明显解决方案。对于这个特定的问题,我想将讨论限制在如何通过双击jar文件在macOS上执行jar文件上 在不修改jar文件的情况下自动恢复

我用两种类型的Java应用程序进行了测试——命令行应用程序和GUI应用程序

命令行应用程序

import java.util.Scanner;

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello, please enter some input");
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        System.out.println(s);
        scan.close();
    }

}
import java.io.File;
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FileChooserExample extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        FileChooser fileChooser = new FileChooser();

        File selectedFile = fileChooser.showOpenDialog(primaryStage);
        System.out.println(selectedFile.getAbsolutePath());
    }
}
然后,我将编译并绑定以下命令:

javac Hello.java
jar cvfe Hello.jar Hello Hello.class
GUI应用程序

import java.util.Scanner;

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello, please enter some input");
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        System.out.println(s);
        scan.close();
    }

}
import java.io.File;
import javafx.application.Application;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FileChooserExample extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        FileChooser fileChooser = new FileChooser();

        File selectedFile = fileChooser.showOpenDialog(primaryStage);
        System.out.println(selectedFile.getAbsolutePath());
    }
}
这是以与命令行应用程序相同的方式编译的。有趣的是,GUI one在双击Windows时工作,但在macOS上有错误如何在macOS上双击jar文件本身而不修改jar文件来执行jar文件?

编辑:如果系统尚未安装Java以外的任何其他可执行文件,我也无法在系统上加载该文件。我最好是通过使用任何标准Java发行版(例如OpenJDK、Oracle等)配置系统来实现这一点。

您可以编写一个简单的程序来接收jar文件,并使用Java命令执行它

一旦完成,双击jar文件时,请按照以下步骤使其成为处理程序:

  • 在Finder中选择任何jar文件
  • 右键单击它并选择“获取信息”
  • 在“打开方式”下,选择您的jar opener应用程序,然后单击“全部更改”,以便新选择适用于所有jar
  • 请注意,要打开的应用程序的选择对话框最初仅限于“推荐的应用程序”。底部有一个组合框,允许您将其更改为“所有应用程序”

    您可以编写一个简单的接收jar文件并使用java命令执行它

    一旦完成,双击jar文件时,请按照以下步骤使其成为处理程序:

  • 在Finder中选择任何jar文件
  • 右键单击它并选择“获取信息”
  • 在“打开方式”下,选择您的jar opener应用程序,然后单击“全部更改”,以便新选择适用于所有jar

  • 请注意,要打开的应用程序的选择对话框最初仅限于“推荐的应用程序”。底部有一个组合框,您可以将其更改为“所有应用程序”

    谢谢您的建议。我所希望的是一种不在系统上加载任何其他代码的方法。换句话说,我正在寻找一种通过配置来实现这一点的方法。有没有办法将Java Launcher应用程序设置为只运行jar文件,运行方式与通过Java-jar Hello.jar执行jar文件的方式相同?什么是“jar opener应用程序?”谢谢您的建议。我所希望的是一种不在系统上加载任何其他代码的方法。换句话说,我正在寻找一种通过配置来实现这一点的方法。有没有一种方法可以将Java Launcher应用程序设置为只运行jar文件,就像通过Java-jar Hello.jar执行jar文件一样?什么是“jar opener应用程序?”我发现只有安装了旧的Java 8,并且授予了一些权限(通过:设置->安全和隐私->完全磁盘访问和添加/System/Library/CoreServices/JavaLauncher向JavaLauncher提供完全磁盘访问),我可以双击一个.jar文件,它将使用javalauncher启动。在java应用程序为java 11重新编译后,这将无法再完成--只需获取您提到的错误。我发现,仅安装了旧的java 8,并且授予了一些权限(通过:设置->安全和隐私->完全磁盘访问和添加/System/Library/CoreServices/JavaLauncher)对JavaLauncher进行完全磁盘访问),我可以双击一个.jar文件,它就可以使用JavaLauncher正常启动了。在java应用程序为java 11重新编译之后,就不能再这样做了——只需获取您提到的错误即可。