好吧,这里的问题是您实际上并没有在环境中为您的第二个 Java 应用程序配置类路径,因此即使您可以调用主类本身(如您所说),也找不到其他依赖项。
我还猜想,即使您使用 Maven 或 Ant 之类的东西,如果您正在构建两个具有不同类路径的独立 Java 应用程序(但一个知道另一个的类路径,那么您可以这样做以便告诉 ProcessBuilder 如何为您的第二个应用程序找到正确的 JAR 和 Class 文件:
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 只是充当系统上其他程序的命令行启动器。