- ベストアンサー
スタンドアロンJavaプログラム(Swing)の複数起動の抑止方法
gimmickの回答
私が思いつく一般的と思われる方法は2つあります。 (1)WindowsのMutexを利用する方法 WinAPIのCreateMutex()を利用し、適当な名前のMutexを作成します。 Mutex作成の成功・失敗でプログラムの二重起動を判定します。 Windowsでは一般的な方法ですので情報は手に入れやすいと思います。 ただし、Java以外の言語でプログラムを書く必要があります。 (2)ファイルチャネルのロックを利用する方法 あくまでJavaのみでということでしたら、ファイルチャネルのロックを利用する方法があります。 説明しにくいのでサンプルコードを書きます。(あくまでサンプルなので、実際に使う場合はよくテストしてください。) 仮にVMが異常終了した場合でもロックはおそらく開放されます。(Windowsがプロセスの終了を検知するため) 万が一開放されなかった場合でも、Windowsの再起動で開放されます。 -------------------------------------------------------------------------------- import java.io.File; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; public class Sample { public static void main(String[] args) { //起動チェック final FileOutputStream fos = new FileOutputStream(new File("lock")); final FileChannel fc = fos.getChannel(); final FileLock lock = fc.tryLock(); if (lock == null) { //既に起動されているので終了する return; } //ロック開放処理を登録 Runtime.getRuntime().addShutdownHook( new Thread() { public void run() { if (lock != null && lock.isValid()) { lock.release(); } fc.close(); fos.close(); } } ); //処理を続行 } } -------------------------------------------------------------------------------- それから、#1さんのソケットを使う方法には以下の問題点があります。 ・メッセージの送受信(起動チェック)とリスン開始(ロック)の処理が分離されている (タイミング次第で多重起動可能) ・起動されていない場合(正常系)と何らかのエラーで返信が返ってこない場合(異常系)の区別ができない ・返信が無いというのはタイムアウトになるということであり、起動時間が多少長くなる 個人用のツールならともかく、業務システムに使用するのはお勧めできません。 #念の為に書いておきますが、回答を批判しているわけではありません。
関連するQ&A
- Javaプログラムをサービスとして起動したい
JavaのプログラムをWindowsのサービスとして起動したいと思っています。 ネットを調べてみると「Java Service Wrapper」などいくつか方法があるみたいですが、どうにもうまくいきません。 端的に、普段 "javaw -jar test.jar" で起動するコンパイル済みJAVAプログラムをサービス化するにはどうすればよいのでしょうか? お分かりになる方いらっしゃいましたらお願いします。 環境 OS: Windows 7 Professional 64bit CPU: AMD Phenom II Java: jdk1.6.0_23 (32bit) ※test.jarは改変せずにサービス化したいです ※ネットではタスクスケジューラと-Xrsオプションを使ってパソコン起動時にJavaを起動する方法も見受けられましたが、 タスクスケジューラは別件でエラーがでるので上手くいきません
- ベストアンサー
- Windows 7
- Javaで作ったプログラムの実行方法
Javaを勉強しているものです。 Javaで作ったプログラムを実行させる場合(テストなどではなくて)、Jarファイルにしてコマンドプロンプトから実行させるのが調べた中ではどうも一般的なようなのですが・・・。若しくはバッチファイルを作成して、そのアイコンをダブルクリックして実行など。 普通のソフトのように、アイコンをダブルクリックして実行できるような形にする方法はあるのでしょうか? ちなみに、作ったプログラムはCSV形式のデータを読み取る部分があり、実行時にそのファイルのありかを引数として与える必要があります。 ソフトを使えばEXEファイルに出来るようなのですが、そういったものを使用せずに出来る方法をご存知の方がいらっしゃいましたら、教えてください。
- ベストアンサー
- Java
- javaアプリケーションの起動方法について
通常WINDOWS上でJAVAアプリケーションのjarファイルをダブルクリックするとアプリケーションが立ち上がりますが、例えばシフトキーを押しながらダブルクリックして立ち上げるとGUIの表示を変えたりといった、条件分岐をしたいのですが、そもそもJAVAでこう言ったことが可能なのでしょうか?参考情報やサイトなどがあれば教えてください。
- 締切済み
- Java
- Java(jarファイル、開発方法、開発環境)について
Javaの初心者です。 -状況- Jarファイルをもらいました。 そのファイルをダブルクリックすると、アプリケーションが起動します。 アプリケーションを変更したいので、Lhacaで解凍したら、classファイルがたくさん入っていました。classファイルは文字化けして読めません。 Eclipse, JBuilder, Textpadのどれかで開発しようと思っています。 (できればEclipse) -質問- 1、Javaプログラムは、classファイルだけでなくjavaファイルが必要だったと思うのですが、classファイルだけでも動くのですか? 2、jarファイルを解凍しないで、開発環境に取り込めますか? 3、Eclipse, Jbuilder, Textpadのどれが一番おすすめですか? 4、全部まとめると、このJavaプログラムを変更するには、どうすればいいですか? おバカな質問かもしれませんが、よろしくお願いします。
- ベストアンサー
- Java
- Java 条件によって起動させない
お世話になります 宜しくお願い致します。 JavaでGUIアプリケーションを開発しております。 そこで、 デスクトップ上にjarのショートカットをダブルクリックで起動し GUIアプリを最小化します。 その後もういちどデスクトップ上の同じショートカットをダブルクリックで起動したときに 既に起動されているjarを最小化状態から通常表示にする(2回目は起動させない) というようなことはできるのでしょうか できるのであれば、参考資料または検索エンジンでどうやったら上記の事象を検索できるか 教えて頂ければ大変ありがたいです。 宜しくお願い致します。
- ベストアンサー
- Java
- jarが実行できない
JDKをインストールしていますが、jarファイルをダブルクリックしても Could not find the main class. Program will exit. と表示され実行できません。 コマンドプロンプトでは java -jar Sample.jar で実行できるのですが。 どうすればよいか教えてください。
- ベストアンサー
- その他(ソフトウェア)
- javaのswingコンポーネントについて質問です。
javaのswingコンポーネントについて質問です。 javaをやり始めて2ヶ月ぐらいたちました。 今までアプレットとアプリケーションの両方をやりこちらはできたのですが 「swing」を使用したアプレット(JApplet)だけがアプレットビューアやhtmlで開いても実行できません。 わかるかたできれば教えていただければ幸いです。 追記 実行できないのはソースファイルにJAppletで組んだプログラムだけです。 本に記載されたソースプログラムやインターネットに上がっているソースプログラムを実行してみましたが これらもJAppletを使用したものだけができませんでした。
- 締切済み
- Java
- jarファイル実行時の環境変数の設定
Macでjavaプログラムを作成しており,jarファイルを作成しています. このjavaプログラムが,別のjavaプログラムのjarファイルを,外部コマンドとして呼び出しており,日本語(SHIFT_JIS)の入力を処理して,日本語(SHIFT_JIS)の出力をします. java7になって,jarファイルのダブルクリックで起動すると,この外部プログラムが,文字化けした出力を出すようになりました. SHIFT_JISのターミナル上で,java -jar AAA.jar のようにプログラムを起動したときには問題なく動作することと,javaのコードが6から7になって,SHIFT_JISからutf-8に変わったことから,外部プログラムの起動時に環境の文字コードがSHIFT_JISとして動作して欲しいところ,utf-8として処理してしまっていることが原因と考えられます. そこで,jarファイルのダブルクリックから起動する場合について,この外部プログラムの起動時に,動作環境の文字コードがSHIFT_JISとして認識される方法をご教示いただけないでしょうか.
- ベストアンサー
- Java
- jarファイルの起動方法
jarファイルを作成して、ダブルクリックで起動できる ようにしたいのですが、作成したjarファイルをクリックしても何の反応もありません。エラーメッセージが 出るわけでもなく、ただ、プログラムが実行されないのです。jarファイルの作成過程は以下のとおりです。 jar cf temp.jar testclass.class jar ufm temp.jar manifest.txt マニフェストファイルの最後には改行をいれてあります。
- ベストアンサー
- Java
- javaプログラムのimportについて
Javaプログラムでサンプルプログラムを実行したいのですが、 com.sun.xml.parser.Resolver;とcom.sun.xml.tree.XmlDocument; をimportするところでエラーがでてしまいます。 javaのビルド・パスで、JARファイルを追加しようと考えております が、上記の2つを含むJARファイルが置いてあるサイト(URL)が 分かりません。どうか教えていただけないでしょうか。 よろしくお願いします。
- ベストアンサー
- Java
お礼
ご回答ありがとうございます。 今回は、「(2)ファイルチャネルのロックを利用する方法」を使わせていただきます。 java.util.logging.Loggerを使っていて、ファイルのロックの例はすぐ目の前にあったのですが、重複起動チェックに使用することまでは気付きませんでした。 タスクマネージャーでJavaプログラム起動中にjavaw.exeプロセスを終了する確認などもしてみました。 今のところ、この方法で特に問題はなさそうです。 非常に助かりました。ありがとうございました。