ここでの問題は、2 番目の Java アプリケーションの環境にクラスパスが実際には構成されていないことです。そのため、メイン クラス自体を呼び出すことはできますが (前述のとおり)、他の依存関係は見つかりません。
また、Maven や Ant などを使用していても、別々のクラスパスを持つ 2 つの別々の Java アプリケーションを構築している場合 (ただし、一方が他方のクラスパスを知っている場合、ProcessBuilder にどのように2 番目のアプリケーションに適した JAR ファイルとクラス ファイルを見つけるには、次のようにします。
public int exec(Class<?> clazz) throws IOException,
InterruptedException {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
/* This is where you want to set up your Classpath for the second app */
String classpath = System.getProperty("java.class.path");
String className = clazz.getCanonicalName();
ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className);
Process process = builder.start();
process.waitFor();
return process.exitValue();
}
しかし、なぜ NetBeans からアプリを起動するのか疑問に思います。最終的には両方のアプリをコマンド ラインから起動する必要があると思われます。コマンドラインからアプリを起動できない場合は、Java からもアプリを起動できません。ProcessBuilder は、システム上の他のプログラムのコマンドライン ランチャーとして動作します。