TITLE:ServerSocketを使ってアプリケーションの複数起動を禁止

ServerSocketを使ってアプリケーションの複数起動を禁止

編集者:Terai Atsuhiro
作成日:2008-02-18
更新日:2021-10-20 (水) 16:19:55

概要

ServerSocketを使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。Java Swing Hacks #68 単一インスタンスのアプリケーションを作る を参考にしています。

#screenshot

サンプルコード

ServerSocket socket = null;
try {
  socket = new ServerSocket(38765);
}catch(IOException e) {
  socket = null;
}
if(socket==null) {
  JOptionPane.showMessageDialog(null, "An instance of the application is already running...");
  return;
}
  • &jnlp;
  • &jar;
  • &zip;

解説

Java Swing Hacks #68 で紹介されている、ポートをロック代わりに使用する方法(任意のポートにバインドできるアプリケーションは一つだけ)で、起動できるアプリケーションを一つに制限しています。

上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、#68 のサンプルでは、ポートへの接続要求が来るまで待機し、要求が発生するとソケット入力ストリームを開いて、コマンドラインオプションを取得する例*1も記述されています。


ポートを使用せずに、JDK 6 にある Attach API を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もあります。

参考リンク

コメント