我有一个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被重定向到某个地方。我怎么能改变这个?
答案 0 :(得分:3)
首先:感谢您使用javafx-maven-plugin, 我是maven-plugin的维护者 。< / p>
简短版本:你做不了多少
长版: 问题来自于JDK的原生发射器,并且与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,这就是原因您没有看到任何控制台输出,但在管道输入到某个文件时会产生结果。
解决方法:使用如下所述的重定向创建/编译您自己的原生启动器文件:
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/