我正在使用ColdFusion MX7对某些Java 6代码执行CFEXECUTE。
不幸的是,由于CF7在JDK 6下不起作用,所以我必须这样做。
我的问题是,如果在Java代码中发生异常,如果我printStackTrace
在异常上调用a ,则CFEXECUTE命令会挂起。ColdFusion
最终超时,但是Java进程继续在后台挂起。
我猜有一些障碍正在发生,但我似乎无法弄清楚为什么。
如果我不这样做,printStackTrace
那么一切正常。
异常是从Oracle信息权限管理wsdl 用JAXWS生成的WebService异常。
编辑
我注意到我可以printStackTrace
使用文件PrintStream
作为参数来调用,并且效果很好。因此,看起来错误流遇到了麻烦。
这是Java代码:
public void Execute(){
AdminUtils AU = AdminUtils.GetInstance();
AccountServicesPort AA = AU.GetAccountServicesPort();
LicenseServerRef LicSerRef = AU.GetLicenseServerRef();
User UserToSave = new User();
UserToSave.setUserName(UserName);
UserToSave.setFirstName(FirstName);
UserToSave.setLastName(LastName);
UserToSave.setEmailAddress(EmailAddress);
UserToSave.setServer(LicSerRef);
try{
AU.LogMessage("Change User: " + UserName + " " + FirstName + " " + LastName + " " + EmailAddress);
AA.saveChangesToUser(UserToSave);
}catch(Exception e){
e.printStackTrace();
}
}
Here is the ColdFusion call:
<!--- Update the IRM User. --->
<CFEXECUTE name="c:\Program Files\Java\jdk1.6.0_14\bin\javaw.exe"
arguments="-cp C:\CFusionMX7\Externals\IRM.jar;C:\CFusionMX7\Externals\Config IRMWebServices.UpdateUser #LoginID# #NewFname# #NewLname#"
timeout="15"
variable="OUTPUT">
</CFEXECUTE>
是的,e.printStackTrace()
;写入stderr
(标准错误流)。由于cfexecute
未捕获stderr
,因此可能是导致
cfexecute挂起的原因。在CF8中有一个补丁可以解决此问题。
由于您使用的是7,请尝试Ben Forta
的以下技巧:
将stderr
重定向到stdout
:几个难题用于运行命令并在完成时终止的标志:使用CFEXECUTE执行命令行实用程序同时使用/c
和2>&1
应该摆脱挂起的问题。
更新:添加了示例
ColdFusion代码:
<cftry>
<cfset argString = '/c "C:\Program Files\Java\jdk1.6.0_13\bin\java.exe" -cp c:\myJar.jar TestStdErr 2>&1' >
<cfexecute name="c:\windows\system32\cmd.exe"
arguments="#argString#"
outputFile="c:\cfexcuteResults.log"
timeout="5" />
<cfcatch>
<cfdump var="#cfcatch#">
</cfcatch>
</cftry>
Java Class:
public class TestStdErr {
public static void main(String[] args) {
try {
// cause a divide by zero exception
int a = 0;
int b = 2 /a;
}
catch(Exception e){
e.printStackTrace();
}
}
}
问题内容: 我正在使用ColdFusion MX7对某些Java 6代码执行CFEXECUTE。 不幸的是,由于CF7在JDK 6下不起作用,所以我必须这样做。 我的问题是,如果在Java代码中发生异常,如果我在异常上调用a ,则CFEXECUTE命令会挂起。ColdFusion最终超时,但是Java进程继续在后台挂起。 我猜有一些障碍正在发生,但我似乎无法弄清楚为什么。 如果我不这样做,那么一切
问题内容: 使用不同的Java库执行数百万个HTTP请求,使我陷入困境: 这是功能。 我试图设置Apche Http Client,并在所有可能的超时(我希望)上超时,但仍然 (可能无限)挂起。如何摆脱它们? 挂断率大约是每10000个请求〜1(对10000个不同的主机),并且可能会永远持续下去(我已确认线程挂起在10小时后仍然有效)。 Windows 7上的JDK 1.8。 我的工厂: 我的工厂
我有一个命名管道文件,如下所示: 当我在PHP中执行类似操作时: 它挂起(即永不返回)。是否有办法使此呼叫返回和/或超时? (编辑) 请注意,我希望一个进程以写权限打开此管道,另一个进程以读权限打开此管道。有人在向这根管子写信,而另一个人在从这根管子读书。问题是读者有时会挂在fopen()上——不管它成功与否,我总是想返回它。
问题内容: 我正在制作一个Android应用程序,该应用程序对您所能获得的积分有时间限制。但是,如果您关闭该应用程序,计时器将继续运行。应用程序暂停时如何暂停? 问题答案: 您可以用类似的方法取消它 并使用该变量保存在一个或其他持久变量中。然后再次使用该变量以启动计时器 共享偏好
首先,这不是重复的: 好的,这是我的错误: 我所做的: 在VisualStudio中,我尝试拉取并更新一个分支,得到了提到的错误。谷歌搜索了一下,发现另一个git进程中的解决方案似乎正在这个存储库中运行,转到命令行(不是git bash),试图删除索引。锁定失败,转到git bash,尝试删除索引。锁,没有错误索引仍然存在(我猜它不是index.lock只是index)。去了VisualStudi
我用的是JavaFX。 当某个文件没有加载时,我希望阶段关闭,该实例中的代码停止执行。