代码之家  ›  专栏  ›  技术社区  ›  Amit

如何通过双击JAR文件来输入运行时参数(main方法)?

  •  4
  • Amit  · 技术社区  · 15 年前

    我遇到过好几次这个问题。如果我将Java应用程序打包在一个可执行的JAR文件中,该文件接受来自用户的参数,那么用户必须通过以下命令从命令提示符调用程序(JAR文件):

    java -jar "jar-file-name.jar"
    

    但我希望每当用户双击可执行jar文件(需要用户提供参数)时,会出现一个窗口(命令提示符窗口),如果我们从命令提示符调用了jar文件,则会出现该窗口。

    我知道解决这个问题的一个办法是使用批处理文件 .bat 运行jar文件。还有别的办法吗?

    3 回复  |  直到 15 年前
        1
  •  5
  •   RedPandaCurios    15 年前

    解释原因:

    有2个Java JVM EXE发射器:

    • java.exe:基于控制台-提供控制台输入/输出。
    • javaw.exe:对于gui应用程序-隐藏控制台。

    默认情况下,jar文件扩展名与javaw.exe关联,这就是双击它们时无法获得控制台的原因。

    其他人给出的答案,以及我自己的答案:

    • 重写你的应用程序,以便它使用Java GUI项目进行输入和输出,而不是Soal.In/Soal.Out.对于你的要求,这可能太复杂了。

    • 您提到创建批处理文件,以便运行基于控制台的Java JVM(Java.exe),还可以创建指定命令行的Windows快捷方式: java -jar jar-file-name.jar

    • 可以更改.jar的Windows文件关联(但一般来说这是个坏主意——新Java安装可能会重置这一点,这意味着从JAR中运行的所有Java应用程序都有控制台)

    • 您可以使用Java启动程序 WinRun4J 它允许您简单地删除一个带有图标的双击exe和一个指定应用程序运行方式的配置文件(带/不带控制台,以及任何其他jvm和命令行参数)

    就我个人而言,我在我的项目中选择了最后一个选项-我使我的jar文件不可执行,用户必须双击exe。它还允许我为我的项目指定一个漂亮的图标,并在启动时提供多个选项(调试/非调试模式),只要有一个不同的exe/config文件。

        2
  •  2
  •   Community CDub    8 年前

    您需要将“.jar”的资源管理器关联重新分配给java.exe,而不是javaw.exe。这是一件有点可疑的事情-创建控制台输出窗口可能更有意义。当然,如果命令行上没有提供所需的执行参数,您可以简单地弹出一个对话框,供用户输入这些参数。

    控制台输出JTextArea有工作代码 here .

        3
  •  0
  •   Thorbjørn Ravn Andersen    15 年前

    这是一个操作系统功能。

    如果需要完全控制,则必须在程序内部(或使用包装类)提供此功能。