2008-09-14 9 views
5

私は、ユーザーが「スタート」 - >「シャットダウン」を選択したときに「きれいにシャットダウン」したいJavaアプリケーションを持っています。 Runtime.addShutdownHook(...)を介してJVMシャットダウンリスナーを使用しようとしましたが、これはUI要素を使用できないため動作しません。JavaアプリケーションをWindowsでうまくシャットダウンするにはどうすればよいですか?

メインアプリケーションのUIウィンドウで終了ハンドラを使用してみましたが、シャットダウンまたはシャットダウンを中止する方法はありません。シャットダウンをうまく処理するにはどうしたらいいですか?

+0

解決策を見つけましたか? – Hoto

答えて

3

前述のJNIアプローチが有効です。

基本的にJNIのラッパーであるJNAを使用すると、使いやすくすることができます。追加のボーナスは、(私の意見では)一般的に、生のJNIよりも速く、保守性が高いということです。 https://jna.dev.java.net/

Windowsのサービスのように動作させようとしているため、開始メニューのアプリケーションを起動しているだけの場合は、ここにあるjavaサービスラッパーを使用できます。 http://wrapper.tanukisoftware.org/doc/english/download.jsp

3

私の知る限り、Windows WM_QUERYENDSESSIONメッセージのメッセージハンドラを設定するには、JNIの使用を開始する必要があります。

これを行うには新しいメッセージ処理関数(here)を使用して新しいクラスのウィンドウを作成し、メッセージハンドラからWM_QUERYENDSESSIONを処理する必要があります。

NB:メッセージ処理スレッドでJNIEnv :: GetJavaVM(...)とJavaVM :: AttachCurrentThread(...)を使用して、ネイティブメッセージ処理からJavaメソッドを呼び出す必要がありますコード。

関連する問題