Tag: 流程构建器

Java中的Processbuilder不会抛出子流程exception

我正在尝试使用ProcessBuilder在Java中执行jar文件。 现在,每当ProcessBuilder调用的子进程抛出任何exception时,ProcessBuilder都不会捕获exception并且执行会继续继续进行。 以下是我的代码: try { ProcessBuilder pb = new ProcessBuilder(“java”, “-jar”, CommonConstants.jarFileLocation, fileEntry.getAbsolutePath(), CommonConstants.commonFileLocation); Process p = pb.start(); } catch (Exception e) { e.printStackTrace(); } catch块假设在子进程抛出任何exception时打印任何exception。 然而,它永远不会。 我错过了什么吗?

是什么导致Java在System.exit()之后继续运行?

我有一个Java程序,它是通过另一个Java程序的ProcessBuilder启动的。 从子程序调用System.exit(0) ,但是对于我们的一些用户(在Windows上),与子项关联的java.exe进程不会终止。 子程序没有关闭挂钩,也没有可能阻止System.exit()终止VM的SecurityManager 。 我无法在Linux或Windows Vista上自行重现此问题。 到目前为止,问题的唯一报告来自两个Windows XP用户和一个Vista用户,使用两个不同的JRE(1.6.0_15和1.6.0_18),但他们每次都能够重现问题。 任何人都可以提出为什么JVM在System.exit()之后无法终止的原因,然后只在某些机器上? 编辑1:我让用户安装JDK,这样我们就可以从违规的虚拟机中获取一个线程转储。 用户告诉我的是,一旦他点击我的菜单中的“退出”项,VM进程就会从VisualVM中消失—但是,根据Windows任务管理器,该进程尚未终止,无论多长时间用户等待(分钟,小时),它永远不会终止。 编辑2:我现在已经确认父程序中的Process.waitFor()永远不会返回至少一个有问题的用户。 总而言之:孩子VM似乎已经死了(VisualVM甚至没有看到它),但是父母仍然认为这个过程是实时的,Windows也是如此。

使用ProcessBuilder运行.java文件

我是一个在Windows XP上使用Eclipse工作的新手程序员,我需要运行多个进程(这将是一个多计算机系统的模拟)。 我最初的hackup使用多个线程到多个类,但现在我正在尝试用进程替换线程。 从我的阅读中,我发现ProcessBuilder是最佳选择。 我已经尝试了下面看到的许多版本的输入,但是在我的生活中无法弄清楚如何正确使用它。 我试图运行我以前创建的.java文件作为类(我已经修改)。 我最终只是做了一个虚拟的test.java来确保我的进程正常工作 – 它唯一的function是打印它运行。 我的两个文件的代码如下。 我正确使用ProcessBuilder吗? 这是读取子进程输出的正确方法吗? 任何帮助将非常感激。 大卫 编辑:解决方案是声明ProcessBuilder(“java.exe”,“ – cp”,“bin”,“Broker.test”); 主要过程 package Control; import java.io.*; import java.lang.*; public class runSPARmatch { /** * @param args */ public static void main(String args[]) { try { ProcessBuilder broker = new ProcessBuilder(“javac.exe”,”test.java”,”src\\Broker\\”); Process runBroker = broker.start(); Reader reader = new InputStreamReader(runBroker.getInputStream()); […]