2番目のJavaプロセスプラットフォームを独立して起動するにはどうすればよいですか?理想的には、現在実行されているものと同じJavaバージョンである必要があります。役に立つシステムプロパティはありますか?2番目のJavaプロセスを開始するにはどうすればよいですか?
答えて
一般的には不可能です。
@ khachikの回答で提供されるレシピは、Sun以外のJava実装では必ずしも機能しません。
Java実行可能ファイルは、必ずしも
java
呼び出されず、必ずしもbin
サブディレクトリに住んでいません。 Sun Javaの場合でも、Windows上には2つの実行可能ファイルがあります。java
およびjavaw
。JVMを起動するコマンドのコマンドオプションは、Java実装によって異なります。従って、
ProcessBuilder
のステップには移植性のない引数が含まれている可能性があります。
ほとんどのJVMは、主日java
コマンドオプションを採用しているが、多数の違いがあります。たとえば:
- IBM J9は、実行可能名として
j9
とj9w
を使用しています。 - BEA/Oracle JRockitは異なる
-X
と-XX
オプションを持っています。 - Jikes RVMは
rvm
を実行可能ファイル名として使用し、サブセットのSunのjava
オプションのみをサポートします。 - IKVMは、実行可能ファイル名として
ikvm
を使用します。
(注:これらは、それぞれのオンラインドキュメントの一遍読みに目立つあくまで一例である。)
現在のJVMを見つけるためにjava.home
システムプロパティを使用することができます。
String jvm = new java.io.File(new java.io.File(System.getProperty("java.home"),
"bin"),
"java").getAbsolutePath();
をし、その後ProcessBuilder
(またはRuntime.exec
)を使用して、それを実行します。
JDKの場合、java.home
は、JDKに含まれるJREディレクトリを指します。
は、あなたは、Apache CommonsのLIBSを使用してみましたか?あなたはlauncher projectを試してみてください。私はしばらく前から私にとってとても役に立ちました。ランチャーコンポーネントは、クロスプラットフォームのJavaアプリケーション起動できるように設計されて
:
はここで自分のサイトからプロジェクトの説明です。
オリジナルのJavaクラスは、Tomcat 4.0プロジェクトから提供されています。
コモンズランチャーは、Javaクラスを起動するためのバッチまたはシェルスクリプトの必要性を排除します。バッチスクリプトやシェルスクリプトを削除することが望ましい状況は、次のとおりです。
- 特定のアプリケーションパスがどこにあるかを判断する必要はありません。あなたのアプリケーションのホームディレクトリなど。Windowsのバッチスクリプトでこれを動的に判断することは、Windowsのいくつかのバージョンや、Unixプラットフォームでソフトリンクが使用されている場合、非常に難しいです。
- ネイティブのファイルとパスの区切り文字やネイティブパスの引用符の問題を処理する必要がないようにする必要があります。
- 特定のシステムプロパティを適用する必要があります。 JDK 1.4で動作している場合はjava.endorsed.dirs。
- スクリプト内の引数を解析して順序を変更することなく、ユーザーがカスタムJVM引数またはシステムプロパティを渡すことを許可します。これは、バッチスクリプトやシェルスクリプトでは、やりにくく、乱雑になります。 バッチファイルとシェルスクリプトでシステムプロパティをハードコードする代わりに、システムプロパティを設定ファイルからブートストラップする必要があります。
- ローカライズされたエラーメッセージを提供したいのですが、これはバッチスクリプトとシェルスクリプトで非常に扱いにくいものです。
私がそれを理解していれば、実行可能ファイルを知っている外部プロセス以外のJavaプロセスを開始することはできません。しかしこれが問題です。私は現在の実行可能ファイルを知らない。 – Horcrux7
- 1. ブルートゥースペアリングのプロセスを開始するにはどうすればよいですか?
- 2. 2番目のサービスモジュールに2番目の経路パラメータを渡すにはどうすればよいですか?
- 3. CSVデータの2行目からリンクリストにスキャンを開始するにはどうすればよいですか?
- 4. Javaプログラミングを開始するにはどうすればよいですか?
- 5. Javaで2番目のクラスの変数にアクセスするにはどうすればよいですか?
- 6. Androidプロジェクトで2番目のJavaクラスを使用するにはどうすればよいですか?
- 7. 特定の番号から番号列を開始するにはどうすればよいですか?
- 8. ImageButtonによるNavigationViewのヘッダから2番目のアクティビティを開始するにはどうすればよいですか?
- 9. エクスプローラから2番目のVisual Studioコードインスタンスを開くにはどうすればよいですか?
- 10. 2番目のプロセスを開始すると、Pythonのマルチプロセッシングエラーが発生する
- 11. Jenkinsジョブから開始された子プロセスを終了するにはどうすればよいですか?
- 12. C#プログラムでwinformの子としてプロセスを開始するにはどうすればよいですか?
- 13. アイドル状態の優先順位で.NETプロセスを開始するにはどうすればよいですか?
- 14. 2番目(ウィンドウ2)のウィンドウでアイテム(テキストボックス、img ...)を設定するにはどうすればよいですか?
- 15. この2番目のアクティビティを開始せずに、アクティビティから別のアクティビティにデータを渡すにはどうすればよいですか?
- 16. golangアプリケーションの起動プロセスを開始するにはどうすればよいですか?
- 17. プロセスを開始して、それをバックグラウンドにするにはどうすればいいですか?
- 18. Hadoopのマップを開始するにはどうすればよいですか?
- 19. アレイで2番目に優れたものを見つけるにはどうすればよいですか?
- 20. Kubernetes - コンテナを2つのプロセスで開始し、両方のプロセスにバインドするにはどうすればよいですか?
- 21. Windowsでサブプロセスを開始するにはどうすればよいですか?
- 22. MDIでマウスイベントを開始するにはどうすればよいですか?
- 23. アンカータグでストライプクレジットカードチェックアウトを開始するにはどうすればよいですか?
- 24. webpackでプロダクションを開始するにはどうすればよいですか?
- 25. アンドロイドで2番目のアクティビティを開始するにはどうすればよいですか?エラーが発生しました
- 26. ASC3(ActionScript 3)フレームの開始時にリスニングを開始するにはどうすればよいですか?
- 27. ノンクラスタード・インデックスでは、2番目、3番目、4番目...の列はどのようにソートされますか?
- 28. ec2ドライバでテストキッチンに2番目のニックを追加するにはどうすればよいですか?
- 29. Javaでキュー内のn番目のアイテムを取得するにはどうすればよいですか?
- 30. 開いたプロセスをJavaでクリーンアップするにはどうすればよいですか?
最初の申し立てをサポートするためのリンクはありますか? –