2012-01-21 20 views
2

したがって、私は自分のプロジェクトをうまく動作する単一の実行可能なjarファイルとしてパッケージ化しました。しかし、ユーザーがファイルを複数回起動すると、同じプロジェクトの複数のインスタンスが起動することがあります(遅延したインスタンスによってファイルに値が上書きされるなどの予期しない動作が発生します)。実行可能なJarファイルのインスタンスを1つだけ実行する

私はWindowsプラットフォーム(Win7)について知りたいですが、実行を一度だけロックするオプションは何ですか?そして、JARが既に実行されている場合は、単にコードの実行を続行しないでください。

プロセスIDについて読んでいますが、複数のJavaアプリケーションがあると、それらはすべてjavagen.exeとしてimagenameを表示してしまい、どのようにして自分のプロセスIDを決定できますか?

このことを行う正しい方法は何かをお勧めします、ありがとうございます!

答えて

3

最も簡単な解決策は、未使用の固定ポートを使用することです。

+0

ありがとう、これはプラトフォームにとっては最高の解決策です:) – Johnydep

1

私が使った最善のアプローチは、特定のポート(61234など)でリスニングServerSocketを作成することでした。ソケットは何もしませんが、あなたがそれを作成することができれば、他のプロセスが開始されていないことを意味します。実行可能なjarファイルの複製インスタンスは、同じポート上にServerSocketを作成することができず、終了する必要があります。

1

アプリケーションの起動時に専用のTCPポートでServerSocketを開き、アプリケーションのシャットダウン時に閉じることができます。

インスタンスがすでに実行されている場合は、「使用中のポート」例外が発生します。

関連する問題