TITLE:SingleInstanceServiceを使って Web Start アプリケーションの重複起動を禁止

SingleInstanceServiceを使って Web Start アプリケーションの重複起動を禁止

編集者:Terai Atsuhiro
作成日:2008-02-18
更新日:2022-07-14 (木) 10:40:45

概要

SingleInstanceServiceを使って、Web Start アプリケーションの重複起動を禁止や、引数の取得を行います。

#screenshot

サンプルコード

final JFrame frame = new JFrame("@title@");
try {
  SingleInstanceService sis =
      (SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService");
  sis.addSingleInstanceListener(new SingleInstanceListener() {
    private int count = 0;
    public void newActivation(String[] args) {
      //System.out.println(EventQueue.isDispatchThread());
      EventQueue.invokeLater(new Runnable() {
        public void run() {
          JOptionPane.showMessageDialog(frame, "");
          frame.setTitle("title:"+count);
          count++;
        }
      });
    }
  });
} catch(UnavailableServiceException use) {
  use.printStackTrace();
  return;
}
  • &jnlp;
  • &jar;
  • &zip;

解説

Web Start アプリケーションの場合、javax.jnlp.SingleInstanceService に、SingleInstanceListener を追加することで、新しい次のインスタンスの起動やその時の引数を取得することが出来ます。

ただし、Java 1.6.0_03*1 では、うまく動作しないようです。


javaws.jar が必要なので、以下のようにクラスパスにします。

set CLASSPATH=%JAVA_HOME%/jre/lib/javaws.jar

または、build.xmlなどに記入してください。

<path id="project.class.path">
  <pathelement location="${build.dest}" />
  <pathelement location="${java.home}/lib/javaws.jar" />
  <pathelement path="${java.class.path}" />
</path>

参考リンク

コメント