もっとも単純な方法は、Process
クラスを使って新しいプロセスをコマンドを叩くような感覚で実行する方法です。
昔はRuntime.exec
メソッドを使う方法でしたが、比較的新しいJavaでは、ProcessBuilder
と組み合わせて使うのが良いです。
Process (Java Platform SE 8 )
https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Process.html
この方法では、起動したプロセスを管理する点において、少し面倒かも知れません。
親プログラムを終了したときに子プログラムも終了させるような場合、子プログラムは自動的には終了しません。
...
URLClassLoader
を使う方法もあります。
URLClassLoader (Java Platform SE 8 )
https://docs.oracle.com/javase/jp/8/docs/api/java/net/URLClassLoader.html
こちらは、動的にクラスパスにJarやクラスファイルを追加して実行するイメージです。
実行したいクラスのmain
メソッドを呼べば、コマンドラインから実行したのと似たような感覚で実行できます。
こちらの方式であればmain
メソッドにこだわる必要はありません。
この方式は、親プログラムと同じJavaプロセス上で実行されるので、System.exit(0)
などでプログラムを終了すれば、子プログラムも自動的に終了します。
あと、こちらの方式は呼び出すコードに多少のリフレクションが必要になります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。