Swing/SingleInstanceApplication のバックアップソース(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/SingleInstanceApplication へ行く。
TITLE:ServerSocketを使ってアプリケーションの複数起動を禁止 #navi(../) *ServerSocketを使ってアプリケーションの複数起動を禁止 [#r7f6907f] >編集者:[[Terai Atsuhiro>terai]]~ 作成日:2008-02-18~ 更新日:&lastmod; #contents **概要 [#k89031ec] ServerSocketを使ってポートをロック代わりに使用し、アプリケーションの複数起動を禁止します。[[Java Swing Hacks #68 単一インスタンスのアプリケーションを作る>http://www.oreilly.co.jp/books/4873112788/toc.html]] を参考にしています。 #screenshot **サンプルコード [#n456379c] #code{{ 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; **解説 [#a5d9fe0a] Java Swing Hacks #68 で紹介されている、ポートをロック代わりに使用する方法で、起動できるアプリケーションを一つに制限しています。 上記のサンプルでは、警告ダイアログを表示して二番目のアプリケーションは終了するだけですが、#68 のサンプルでは、ポートへの接続要求が来るまで待機し、要求が発生するとソケット入力ストリームを開いて、コマンドラインオプションを取得する例((タブブラウザなどのように既に起動しているアプリケーションで別のコンテンツを開く場合に使用する))も記述されています。 ---- ポートを使用せずに、JDK 6 にある Attach API を使ったり、ロックファイルを使用して起動するアプリケーションの数を制御する方法もあります。 -参考サイト --[[PseudoFileSemaphore (アプリケーションのインスタンス数を制御するには-その3) - KazzzのJとNのはざまで>http://d.hatena.ne.jp/Kazzz/20071218/p1]] --[[Attach API (アプリケーションのインスタンス数を制御するには-その4) - KazzzのJとNのはざまで>http://d.hatena.ne.jp/Kazzz/20071221/p1]] **参考リンク [#f479b3e9] -[[Java Swing Hacks #68 単一インスタンスのアプリケーションを作る>http://www.oreilly.co.jp/books/4873112788/toc.html]] **コメント [#w03a2a60] #comment