C#コンソールアプリケーションからJavaアプリケーションを正しくシャットダウンするコードを作成しましInputSimulator
たが、試してみると、期待した結果が得られませんでした。
キーボード CTRL-C を使用して Java アプリケーションを閉じると、
...
[INFO] 2012-07-03 19:29:36 - Packet: [C] 0x02
[INFO] 2012-07-03 19:29:40 - Shutdown hook raised, shutting down...
[INFO] 2012-07-03 19:29:45 - All data saved. Good luck!
InputSimulator を使用して Java アプリケーションを閉じると、
フル スレッド ダンプ Java HotSpot(TM) クライアント VM (20.6-b01 混合モード):
"DestroyJavaVM" prio=6 tid=0x4b524000 nid=0x6f4 条件 [0x00000000] java.lang.Thread.State: RUNNABLE で待機中
"Thread-1" prio=6 tid=0x4b523800 nid=0x65c 条件 [0x4cd0f000] で待機.run(DeadlockDetector.java:76) で java.lang.Thread.run(不明なソース)
"server-rdc-acceptor" prio=6 tid=0x4b523000 nid=0x102c 実行可能 [0x4cc7f000] java.lang.Thread.State: sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0 (ネイティブ メソッド) で実行可能です。 ch.WindowsSelectorImpl$SubSelector.poll(不明なソース) at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(不明なソース)
at sun.nio.ch.WindowsSelectorImpl.doSelect(Unknown Source) at sun.nio.ch.SelectorImpl.lockAndDoSelect(Unknown Source) - locked <0x3e057ef0> (a sun.nio.ch.Util$2) - locked <0x3e057ee0> (a java.util.Collections$UnmodifiableSet) - locked <0x3e057cc0> (a sun.nio.ch.WindowsSelectorImpl) at sun.nio.ch.SelectorImpl.select(Unknown Source) at sun.nio.ch.SelectorImpl.select(Unknown Source) at commons.ngen.network.Acceptor.run(Acceptor.java:259)
私のInputSimulatorを使用:
private void StartServer()
{
ProcessStartInfo info = new ProcessStartInfo();
info.UseShellExecute = false;
info.FileName = "java"
info.Arguments = "-Xms512m -Xmx1024m server.jar gameserver.Server"
ServerProcess = new Process();
ServerProcess.StartInfo = info;
ServerProcess.Start();
Thread.Sleep(60000);
CloseCorrectly(ServerProcess);
}
private void CloseCorrectly(Process pr)
{
IntPtr hWnd = pr.MainWindowHandle;
if (hWnd != null)
{
SetForegroundWindow(hWnd);
Thread.Sleep(1000);
InputSimulator f = new InputSimulator();
f.Keyboard.ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.CANCEL);
Thread.Sleep(1000);
}
}
私が間違っているのは何ですか?