2

プログラミングに関する質問の解決策を見つけるために、しばらく Stackoverflow を使用してきましたが、現在の質問については、有用な解決策が見つかりませんでした。それで合流しました。

Java アプレットを 1 つのインスタンスのみに制限するための適切なソリューションは何でしょうか。私はphpを使用してエンドユーザーにアプレットを提供しているので、それはオプションです。

しかし、アプレット自体を介して Java アプレットの実行を制限できるかどうかは、もっと興味深いことです。私はJavaにかなり慣れていないので、そのような構造をどこから探し始めるべきか本当にわかりません。

任意の提案をいただければ幸いです。

補足として、「 指定された URL の Java アプレットに対して 1 つのウィンドウのみを起動する javascript」が解決策になります。私は自分が構築しているアプリケーションにアプレットを埋め込んでいますが、アプレットを提供するポップアップにはあまり熱心ではありません。

敬具 AltWouss

編集:
インスタンスの制限を明確にする。マシンごとにアプレットを 1 つだけロードしたいと考えています。

4

4 に答える 4

2

アプレットのよく知られたポートで SocketServer を開始してみませんか?

その SocketServer を開くと、別の SocketServer が既に実行されていることが原因である可能性があります。次に、その旨を伝えるメッセージを表示できます。

于 2010-07-19T10:01:41.833 に答える
1

Java WebStart を使用する場合は、 JNLP がありSingleInstanceServiceます。

于 2010-07-19T12:04:08.680 に答える
1

残念ながら、Java はプロセス間でロックするための名前付きミューテックスをサポートしていません。ただし、アプレットの起動時に既知の名前で既知の場所にファイルを作成するだけで、プリミティブ ロックを実装できます。ファイルを作成できない場合は、アプリケーションがすでに 1 回開始されているため、ファイルが既に存在していることがわかります。アプリケーションの終了時にファイルが確実に削除されるようにするには、単純に File.deleteOnExit() メソッドを呼び出します。

何かのようなもの:

if(file.createNewFile()) {
    file.deleteOnExit();
} else {
    throw new Exception("Instance already running!");
}

完璧な解決策ではなく、確かにいくつかの問題があります...しかし、おそらくあなたがやろうとしていることには十分です。また、より堅牢で適切なソリューションを提供できるFileLockクラスを調べることもできます。

于 2010-07-19T13:35:48.350 に答える
0

これが役立つかどうかはよくわかりません..しかし、最初に頭に浮かぶのは..アプレットをシングルトンにすることは可能ですか? 申し訳ありませんが、これは回答というよりフォローアップの質問です...

于 2010-07-19T10:14:01.963 に答える