Swing/SingleInstanceApplication のバックアップの現在との差分(No.4)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SingleInstanceApplication へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: SingleInstanceApplication title: ServerSocketを使ってアプリケーションの複数起動を禁止 tags: [ServerSocket, SingleInstance] author: aterai pubdate: 2008-02-18T16:46:47+09:00 description: ServerSocketを使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTTF6N0NjI/AAAAAAAAAj0/Ld2Nyv4QXsI/s800/SingleInstanceApplication.png --- * 概要 [#r7f6907f] `ServerSocket`を使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。[http://www.oreilly.co.jp/books/4873112788/toc.html Java Swing Hacks #68 単一インスタンスのアプリケーションを作る] を参考にしています。 * 概要 [#summary] `ServerSocket`を使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。[https://www.oreilly.co.jp/books/4873112788/ Java Swing Hacks #68 単一インスタンスのアプリケーションを作る] を参考にしています。 #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTTF6N0NjI/AAAAAAAAAj0/Ld2Nyv4QXsI/s800/SingleInstanceApplication.png) * サンプルコード [#n456379c] * サンプルコード [#sourcecode] #code(link){{ ServerSocket socket = null; try { socket = new ServerSocket(38765); } catch (IOException e) { socket = null; } if (socket==null) { if (socket == null) { JOptionPane.showMessageDialog(null, "An instance of the application is already running..."); return; } }} * 解説 [#a5d9fe0a] `Java Swing Hacks #68`で紹介されている、ポートをロック代わりに使用する方法(任意のポートにバインドできるアプリケーションは一つだけ)で、起動できるアプリケーションを一つに制限しています。 * 解説 [#explanation] `Java Swing Hacks #68`で紹介されているポートをロックとして使用する方法(任意のポートにバインドできるアプリケーションは一つだけ)で起動できるアプリケーションを一つに制限しています。 上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、`#68`のサンプルでは、ポートへの接続要求が来るまで待機し、要求が発生するとソケット入力ストリームを開いて、コマンドラインオプションを取得する例(タブブラウザなどのように既に起動しているアプリケーションで別のコンテンツを開く場合に使用する)も記述されています。 上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、`#68`のサンプルではポートへの接続要求が来るまで待機し要求が発生するとソケット入力ストリームを開いてコマンドラインオプションを取得する例(タブブラウザなどのように既に起動しているアプリケーションで別のコンテンツを開く場合に使用する)も記述されています。 ---- 以下のように、ポートを使用せずに`JDK 6`にある`Attach API`を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もあります。 - 以下のリンクのようにポートを使用せず`JDK 6`にある`Attach API`を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もある -- [https://kazzz.hatenablog.com/entry/20071218/p1 PseudoFileSemaphore (アプリケーションのインスタンス数を制御するには-その3) - KazzzのJとNのはざまで] -- [https://kazzz.hatenablog.com/entry/20071221/p1 Attach API (アプリケーションのインスタンス数を制御するには-その4) - KazzzのJとNのはざまで] - 参考 -- [http://d.hatena.ne.jp/Kazzz/20071218/p1 PseudoFileSemaphore (アプリケーションのインスタンス数を制御するには-その3) - KazzzのJとNのはざまで] -- [http://d.hatena.ne.jp/Kazzz/20071221/p1 Attach API (アプリケーションのインスタンス数を制御するには-その4) - KazzzのJとNのはざまで] * 参考リンク [#f479b3e9] - [http://www.oreilly.co.jp/books/4873112788/toc.html Java Swing Hacks #68 単一インスタンスのアプリケーションを作る] * 参考リンク [#reference] - [https://www.oreilly.co.jp/books/4873112788/ Java Swing Hacks #68 単一インスタンスのアプリケーションを作る] - [[SingleInstanceServiceを使って Web Start アプリケーションの重複起動を禁止>Swing/SingleInstanceService]] -- `javax.jnlp.SingleInstanceService`を使用して複数起動を禁止する * コメント [#w03a2a60] * コメント [#comment] #comment #comment