使用javaw.exe启动应用程序时不执行关闭挂钩

时间:2009-07-18 18:56:18

标签: java windows

如果我使用javaw.exe启动Java应用程序,则当用户从其Windows帐户注销时,不会执行关闭挂钩。该应用程序实际上是使用launch4j生成的.exe文件启动的,但我知道它使用javaw.exe来启动它。

这似乎是一个已知的错误: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4302814

还有其他人有这个问题吗?如果是这样,你是如何解决它的?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

应用程序实际上是使用launch4j生成的.exe文件启动的,但我知道它使用javaw.exe来启动它。

我有一段时间没有使用launch4j,但如果直接这样做,我会感到非常惊讶。这些应用程序中的大多数都是自己启动jvm,而不是炮轰javaw。

java.exe和javaw.exe之间的唯一区别是java.exe会自动附加一个控制台。您引用的错误(以及由其引用的其他错误)已关闭,因为Sun似乎没有兴趣更好地处理Windows注销事件。据我所知,它只适用于java.exe,因为控制台本身处理WM_MESSAGES的方式会减慢关机过程。

目前唯一容易解决的方法是将launch4j配置中的“headerType”更改为“console”。显然,这带来了一个丑陋的控制台。

我认为另一种选择是使用某种本地包装器,以更清晰的方式处理Windows消息。