java - 从使用 Inno Setup 和 maven 创建的 native javafx 应用程序写入控制台

标签 java maven javafx cmd inno-setup

我有一个 JavaFX 应用程序,我正在使用 maven 插件 javafx-maven-plugin创建应用程序包(Windows 中的 app.exe,使用 Inno Setup 生成)。

当给定参数时,应用程序以控制台模式运行。

问题是在控制台模式下运行时,我看不到打印到控制台的消息。消息(用 System.out.println 编写)不会出现在 Windows 控制台中。但它们是生成的,因为如果我将输出重定向到一个文件 (app.exe > out.txt),该文件包含所有消息。

我曾尝试使用 cygwin 运行 .exe,甚至在 Linux 中编译了整个项目,在这两种情况下,输出都正确显示在控制台中。所以问题似乎只有在使用 Windows 控制台 (cmd) 运行 javafx exe 时才会出现。我猜标准输出被重定向到某个地方。我该如何更改?

最佳答案

首先:感谢您使用 javafx-maven-plugin,我是该 maven-plugin 的维护者

简短版:你不能做太多

长版: 该问题与 JDK 的 native 启动器有关,与 InnoSetup 或 Maven 无关。

引用 the source-code itself这是发生了什么:

Basic approach:
  - Launcher executable loads packager.dll/libpackager.dylib/libpackager.so and calls start_launcher below.
  - Reads app/package.cfg or Info.plist or app/<appname>.cfg for application launch configuration
     (package.cfg is property file).
  - Load JVM with requested JVM settings (bundled client JVM if availble, server or installed JVM otherwise).
  - Wait for JVM to exit and then exit from Main
  - To debug application by set env variable (TODO) or pass "/Debug" option on command line.
  - TODO: default directory is set to user's Documents and Settings.
  - Application folder is added to the library path (so LoadLibrary()) works.

在发射器内部挖一点后,如果找到那个地方,where the STD-output is retrieved ,它被编译,因为 on windows-systems "USE_JLI_LAUNCH" is not set .真正的问题在于只附加该控制台编写器的条件 when being compiled with DEBUG-flag

这可能是 JDK 本身的错误/侥幸,我会尝试找到一些东西并可能将其作为错误记录在 oracle-bug-tracker 上。

编辑: 在进一步挖掘之后,我发现了一些有趣的东西:生成的 EXE 文件是一个简单的 windows 可执行文件,没有 cli 可执行文件 as seen in the launcher-source-code ,这就是您看不到任何控制台输出但在流水线化到某个文件时得到结果的原因。

解决方法:使用此处所述的一些重定向来创建/编译您自己的 native 启动器文件:

Redirecting cout to a console in windows

https://bobobobo.wordpress.com/2009/03/01/how-to-attach-a-console-to-your-gui-app-in-c/

关于java - 从使用 Inno Setup 和 maven 创建的 native javafx 应用程序写入控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31537869/

相关文章:

java - 尝试更新数据库时丢失数据

java - Maven pom.xml 本地依赖关系未解决

eclipse - Eclipse 无法识别 JavaFX

java - 当我尝试加载 FXML 文件时,出现 java.io.IOException 错误

java - 将示例 XML 代码放入 Javadoc

java - JOptionPane 边框的颜色

java - JNI : Library is Found on Path, 但方法不是 (java.lang.UnsatisfiedLinkError)

java - 如何使用 Maven 运行多个 Jetty 实例

java - 配置 SonarQube 以显示多个 Maven 模块的一个仪表板

java - 场景构建器导入到 Eclipse