从Windows命令行程序生成一个multithreadingJava程序,spawner将不会结束,直到spawnee结束。 我怎样才能防止挂?

简洁版本:

我怎样才能防止在Windows产生的Java进程阻止产卵过程结束?

长版本:

我尝试从Windows命令行启动的程序(NAnt的<exec>任务,同样不重要)产生一个multithreading的Java程序(Selenium RC,不应该这么重要)。 我正在使用Windows“开始”命令来执行此操作,生成的进程将启动并正确运行。 产卵过程接收控制回来并结束(NAnt表示“BUILD SUCCEDED”),但是不实际退出到命令行。 当生成的进程终于终止(可能是几个小时后),命令进程返回并出现命令行提示符。

例如:

<target name="start_rc"> <exec program="cmd" failonerror="false" workingdir="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1" verbose="true"> <arg value="/C"/> <arg value="start"/> <arg value="java"/> <arg value="-jar"/> <arg path="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1\selenium-server.jar"/> <arg value="-userExtensions"/> <arg path="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1\user-extensions.js"/> <arg value="-browserSideLog"/> <arg value="-log"/> <arg value="${ross.p5.dir}\artifacts\selenium.log"/> <arg value="-debug"/> </exec> </target> 

生产:

 C:\Ross>nant start_rc NAnt 0.86 (Build 0.86.2898.0; beta1; 12/8/2007) Copyright (C) 2001-2007 Gerry Shaw http://nant.sourceforge.net Buildfile: file:///C:/Ross/ross.build Target framework: Microsoft .NET Framework 3.5 Target(s) specified: start_rc start_rc: [exec] Starting 'cmd (/C start java -jar C:\p5\Tools\selenium\selenium-server-1.0.1\selenium-server.jar -userExtensions C:\p5\Tools\selenium\selenium-server-1.0.1\user-extensions.js -browserSideLog -log C:\p5\artifacts\selenium.log -debug)' in 'C:\p5\Tools\selenium\selenium-server-1.0.1' BUILD SUCCEEDED Total time: 4.1 seconds. 

…然后什么都没有,直到我closures了Java运行的窗口,然后…

 C:\Ross> 

显然有些东西阻止了nant进程终止,但Windows START命令不应该阻止?

你的执行任务有一个问题,那就是那个产卵者默认为假。 从NAnt文档 :

获取或设置一个值,指示是否应该生成应用程序。 如果你生成一个应用程序,它的输出将不会被NAnt记录。 默认值是false

在Ant文档中 (请记住,NAnt是“不是Ant”,但仍然…),有一个使用exec任务的spawn参数的具体示例:

 <property name="browser" location="C:/Program Files/Internet Explorer/iexplore.exe"/> <property name="file" location="ant/docs/manual/index.html"/> <exec executable="${browser}" spawn="true"> <arg value="${file}"/> </exec> 

当该浏览器任务触发时,Internet Explorer将打开该页面,但构建将继续而不等待输出或任务完成。

我不是100%确定这是你以后,但我想你想要的是javaw而不是java。

取自Sun的JDK 6文档:

javaw命令与java完全相同,只是在javaw中没有关联的控制台窗口。 如果不希望显示命令提示符窗口,请使用javaw。 但是,如果由于某种原因启动失败,javaw启动器将显示一个包含错误信息的对话框。