从使用Inno Setup和maven创建的本机javafx应用程序写入控制台

我有一个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时才会出现问题。 我想stdout被重定向到某个地方。 我怎么能改变这个?

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

简短版:你做不了多少

长版本:问题来自JDK的原生发射器,并且与InnoSetup和Maven没什么关系。

引用源代码本身就是这样:

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/.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. 

在启动器内部挖掘一下后,如果找到了检索STD输出的地点, 那么就会被编译,因为在Windows系统上没有设置“USE_JLI_LAUNCH” 。 这个问题的真正问题在于,只有在使用DEBUG-flag编译时才附加该控制台编写器

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

编辑:经过一些进一步的挖掘,有一些我觉得有趣:生成的EXE文件是一个简单的Windows可执行文件,没有cli-executable, 如启动器源代码中所见 ,这就是你没有看到任何控制台的原因 -在输出到某个文件时输出但有结果。

解决方法:使用如下所述的一些重定向创建/编译您自己的本机启动程序文件:

将cout重定向到Windows中的控制台

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