SingleInstanceServiceを使って Web Start アプリケーションの重複起動を禁止
Total: 9237
, Today: 2
, Yesterday: 1
Posted by aterai at
Last-modified:
概要
SingleInstanceService
を使って、Web Start
アプリケーションの重複起動を禁止したり、引数の取得を行います。
Screenshot
Advertisement
サンプルコード
JFrame frame = new JFrame("@title@");
try {
SingleInstanceService sis =
(SingleInstanceService) ServiceManager.lookup("javax.jnlp.SingleInstanceService");
sis.addSingleInstanceListener(new SingleInstanceListener() {
private int count = 0;
@Override public void newActivation(String[] args) {
// System.out.println(EventQueue.isDispatchThread());
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
JOptionPane.showMessageDialog(frame, "");
frame.setTitle("title:" + count);
count++;
}
});
}
});
} catch (UnavailableServiceException use) {
use.printStackTrace();
return;
}
View in GitHub: Java, Kotlin解説
Web Start
アプリケーションの場合、javax.jnlp.SingleInstanceService
にSingleInstanceListener
を追加することで、新しい次のインスタンスの起動やその時の引数取得などが可能になります。
- コンパイルに
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>
参考リンク
- SingleInstanceService (JNLP API Reference 1.8.0_71)
- Bug ID: 6631056 SingleInstanceService does not work on JRE 1.6.0_03
- Java Web Start SingleInstanceService - appframework(JSR-296)
- ServerSocketを使ってアプリケーションの複数起動を禁止