Swing/SingleInstanceApplication のバックアップの現在との差分(No.1)
TITLE:ServerSocketを使ってアプリケーションの複数起動を禁止
ServerSocketを使ってアプリケーションの複数起動を禁止
編集者:Terai Atsuhiro~
作成日:2008-02-18
更新日:2021-10-20 (水) 16:19:55
概要
ServerSocket
を使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。Java Swing Hacks #68 単一インスタンスのアプリケーションを作る を参考にしています。
Screenshot
Advertisement
概要
ServerSocketを使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。Java Swing Hacks #68 単一インスタンスのアプリケーションを作る を参考にしています。#screenshot
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
ServerSocket socket = null;
try {
socket = new ServerSocket(38765);
#spandel
}catch(IOException e) {
#spanend
#spanadd
} catch (IOException e) {
#spanend
socket = null;
}
#spandel
if(socket==null) {
#spanend
#spanadd
if (socket == null) {
#spanend
JOptionPane.showMessageDialog(null, "An instance of the application is already running...");
return;
}
- &jnlp;
- &jar;
- &zip;
解説
Java Swing Hacks #68 で紹介されている、ポートをロック代わりに使用する方法で、起動できるアプリケーションを一つに制限しています。解説
Java Swing Hacks #68
で紹介されているポートをロックとして使用する方法(任意のポートにバインドできるアプリケーションは一つだけ)で起動できるアプリケーションを一つに制限しています。
上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、#68 のサンプルでは、ポートへの接続要求が来るまで待機し、要求が発生するとソケット入力ストリームを開いて、コマンドラインオプションを取得する例*1も記述されています。
上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、#68
のサンプルではポートへの接続要求が来るまで待機し要求が発生するとソケット入力ストリームを開いてコマンドラインオプションを取得する例(タブブラウザなどのように既に起動しているアプリケーションで別のコンテンツを開く場合に使用する)も記述されています。
ポートを使用せずに、JDK 6 にある Attach API を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もあります。
- 参考サイト
- 以下のリンクのようにポートを使用せず
JDK 6
にあるAttach API
を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もある
参考リンク
参考リンク
- Java Swing Hacks #68 単一インスタンスのアプリケーションを作る
- SingleInstanceServiceを使って Web Start アプリケーションの重複起動を禁止
-
javax.jnlp.SingleInstanceService
を使用して複数起動を禁止する
-