当前位置: 首页 > 知识库问答 >
问题:

在Windows上使用JPackage是否可以使main. exe不作为控制台运行,但让其他Laucher作为控制台运行?

黄信厚
2023-03-14

对于JPackage,我无法为主启动器获得--win-console选项,但我希望主启动器不输出到控制台,而是有一个这样的调试版本。

即如果我跑了

jpackage --add-launcher SongKongDebug=jpackage.properties @jpackage.txt 

jpackage.txt

-i C:\Code\jthink\SongKong\target\songkong-6.10
--runtime-image C:\code\jthink\songkong\JVM64
--main-class com.jthink.songkong.cmdline.SongKong
--name SongKong
--win-dir-chooser
--main-jar lib\SongKong-6.10.jar
--app-version 6.10
--install-dir Jthink\SongKong
--copyright "Copyright 2020 JThink Ltd, United Kingdom"
--license-file C:\Code\jthink\SongKong\src\main\scripts\license.txt
--java-options "-Dhttps.protocols=TLSv1.1,TLSv1.2"
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED"
--java-options "-XX:MaxRAMPercentage=75.0"
--java-options "-XX:MetaspaceSize=45 "
--java-options "-Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog"
--java-options "-Dorg.jboss.logging.provider=jdk"
--java-options "-Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging"
--vendor JThink
--win-menu
--win-shortcut
--win-menu-group Jthink

J包装。属性

win-console=--win-console

然后,SongKong和SongKongDebug都在没有控制台的情况下运行

我还尝试修改jpackage.properties(whicch是指名称/值对)到

--win-console

但还是没用

而如果我加上

--win-console 

jpackage.txt和

win-console 

去jpackage.properties

然后Song Kong将作为控制台运行,而Song KongDebug不会,但对我来说是错误的。

如果我将SongKong重命名为SongKongDebug,将SongKongDebug重命名为SongKong

e、 g级

jpackage --add-launcher SongKong=jpackage.properties @jpackage.txt

并修改设置——名称SongKongDebug

在jpackage.txt

然后它工作了,但现在安装SongKong时,它说安装SongKongDebug是错误的。

我尝试了当前的Java 14版本和early access Java 15和16版本,但没有什么不同。

我发现报告了这个bug,但用户认为没有问题就关闭了它https://bugs.openjdk.java.net/browse/JDK-8213717我发现jpackage的帮助有点令人困惑,所以我想知道我是否用了错误的方法。

帮助说

创建应用程序启动器的选项:

--添加启动器启动器名称=文件路径

Name of launcher, and a path to a Properties file that contains a list of key, value pairs (absolute path or relative to the current

目录)。

The keys "module", "add-modules", "main-jar", "main-class", "arguments", "java-options", "app-version", "icon", and "win-console"

可以使用。

These options are added to, or used to overwrite, the original command line options to build an additional alternative launcher. The

主应用程序启动器将从命令行选项构建。可以使用此选项构建其他替代启动器,并且可以多次使用此选项来构建多个附加启动器。--参数主类参数

Command line arguments to pass to the main class if no command line arguments are given to the launcher.

This option can be used multiple times.

--java选项java选项

Options to pass to the Java runtime.

This option can be used multiple times.

--主类类名称

Qualified name of the application main class to execute.

This option can only be used if --main-jar is specified.

--main-jar主jar文件

The main JAR of the application; containing the main class (specified as a path relative to the input path).

Either --module or --main-jar option can be specified but not both.

--模块或-m模块名称/主类]

The main module (and optionally main class) of the application This module must be located on the module path.

When this option is specified, the main module will be linked in the Java runtime image. Either --module or --main-jar option can be

指定,但不是同时指定。

因此,您可以使用--add-Launcher创建附加启动器并使用属性文件,但它也使听起来您可以将额外的参数作为额外的comand line选项传递,但这怎么可能是因为它不清楚他们指的是哪个启动器?

共有1个答案

郭子航
2023-03-14

您可以为每个--add-Launcher属性文件指定控制台选择,其中包含win-conf=truewin-conf=false

J包装。属性

 # This adds console for the current launcher:
 win-console=true

在命令行或参数文件@jpackage.txt中,标志--win控制台在主应用程序的控制台上切换,并且没有指定--add-Launcher的文件:

@J包装。txt文件

# This adds console for all applications:
--win-console

不幸的是,jpackage有一个bug JDK-8253426,它阻止了在JDK15中使用不同的主类xyz设置添加启动器。

 类似资料:
  • 问题内容: 如何将用户输入(仅用户输入)发送到输出流? 我目前正在使用钥匙清单, 如您所见,当用户按下键时,控制台的最后一行是textarea。 我想发生的是,仅发送用户输入,而不发送整个最后一行。任何帮助将不胜感激。 问题答案: 好吧,这就是我的主意… 基本思想是我们要跟踪“用户”输入和“过程”输出。 基本上,我所做的就是对其进行设置,以便在过程终止时,我们计算文档中插入符号的当前位置,并将其标

  • 我试图在我的控制台应用程序中创建流程动画。有没有可能为此需求重写之前的台词?我知道< code>\r但它只对当前行有效。 如果不可能,我怎么能达到动画效果?谢谢。 我的主机是标准的Ubuntu 12.04终端模拟器。 感谢@MrSmith42,我制作了这个简单的演示,它展示了改写行的方法:

  • 问题内容: 我正在编写一个通过System.out输出字符串的Java应用程序,我只想知道如何在IDE外部运行此应用程序。我有一个可执行的jar。如何在控制台中看到此输出? 问题答案: 基本上: Sun网站有更多信息

  • 问题内容: 我已经开发了一个Java控制台应用程序,该应用程序在启动时打开控制台窗口并保持在前台,我想在后台启动该应用程序。 现在,我通过以下命令行启动该应用程序: 有没有办法实现这种行为?更改命令行参数就足够了,还是我需要对代码进行一些更改? 问题答案: 答案取决于操作系统。