使用流程构建器在自己的操作系统进程中启动其他Java应用程序。该实现适用于Windows 7,但不适用于Linux。两台机器都使用Java 1.7。以下是一些示例代码:
//Windows OK, but Linux Could not find or load main class
//weka.subspaceClusterer.MySubspaceClusterEvaluation
ArrayList<String> commands = new ArrayList<String>();
commands.add("java");
commands.add("-cp");
commands.add("\".:lib/*\"");
commands.add("weka.subspaceClusterer.MySubspaceClusterEvaluation");
procBuilder = new ProcessBuilder();
procBuilder.inheritIO();
procBuilder.command(commands);
Process proc = procBuilder.start();
答案 0 :(得分:1)
Windows下的类路径分隔符为;
,但Unix下为:
。
考虑创建一个可运行的jar,其中您的类路径存储在MANIFEST.MF条目中,因此您只需执行java -jar whatever.jar
。
答案 1 :(得分:1)
我在Mac OS X上遇到了类似的问题。它在终端中工作但在Eclipse中没有。如果我删除类路径字符串周围的引号,它对我有用。我猜Eclipse JVM在传递给ProcessBuilder的任何参数周围都有引号时不喜欢它。
答案 2 :(得分:0)
您的代码看起来是正确的。它只是找不到你的类文件。尝试设置流程的工作目录:
procBuilder.directory(new File("package/structure/starts/here"));