在给出参数时,应用程序以控制台模式运行.
问题是当在控制台模式下运行时,我看不到打印到控制台的消息.消息(使用System.out.println编写)不会出现在Windows控制台中.但它们是生成的,因为如果我将输出重定向到文件(app.exe> out.txt),则该文件包含所有消息.
我试图用cygwin运行.exe甚至在Linux中编译整个项目,在这两个项目中输出都正确地显示在控制台中.所以问题似乎只有在使用Windows控制台(cmd)运行javafx exe时才会出现问题.我想stdout被重定向到某个地方.我怎么能改变这个?
解决方法
简短版:你做不了多少
长版:
问题来自于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上的bug提交.
编辑:经过一些进一步的挖掘,有一些我觉得有趣:生成的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/