Приложение на самом деле запускается с использованием файла сгенерированного launch4j .exe, но я знаю, что для его запуска используется javaw.exe.
Я давно не использовал launch4j, но был бы весьма удивлен, если бы он сделал это напрямую. Большинство этих приложений запускают jvm сами, а не обстреливают javaw.
Единственная разница между java.exe и javaw.exe заключается в том, что java.exe автоматически подключается к консоли. Ошибка, на которую вы ссылаетесь (и другие, на которые она ссылается), была закрыта, так как Sun, похоже, не заинтересована в улучшении обработки событий выхода из Windows. Насколько я могу судить, он работает только с java.exe, потому что сама консоль обрабатывает WM_MESSAGES таким образом, что замедляет процесс завершения работы.
Похоже, что единственный простой обходной путь на данный момент - это изменить "headerType" в вашей конфигурации launch4j на "console". Очевидно, это приносит с собой уродливую консоль.
Я думаю, что другой альтернативой было бы использовать какую-то нативную оболочку, которая обрабатывает сообщения Windows более чистым способом.