我试图使用Jacob调用现有的VFP 6应用程序,Jacob是Java的COM桥。
val vfp = new Application(new ActiveXComponent("VisualFoxPro.Application").getProperty("Application").toDispatch())
vfp.setVisible(false)
try {
vfp.doCmd("do my.exe with myconfig.txt")
} catch {
case t: Throwable => t.printStackTrace
} finally {
vfp.doCmd("close data")
vfp.doCmd("clear all")
vfp.doCmd("clear")
vfp.quit
vfp.safeRelease
}
当没有错误条件时,此代码执行良好并生成预期的.dbfs。问题是当发生错误(找不到.dbf,其他用户正在使用的文件等)时,会弹出一个GUI窗口并停止执行该程序,直到我用鼠标取消它。我希望这个程序在没有用户交互的服务器上运行,所以这不起作用。
如何在不更改VFP 6程序的情况下优雅地处理错误?
答案 0 :(得分:2)
由于您拥有VFP6的源代码,我建议您查看
SYS(2335,0)
Sys 2335用于识别程序是否以“无人值守”模式运行,任何此类弹出对话框都会抛出错误并阻止实际“命中”确定/取消/任何按钮继续。这包括提示用户选择表格的弹出窗口。
我不确定它什么时候可用,因为我使用它有限。和你一样,在IIS下处理COM服务器时,显然没有人可以回复。
答案 1 :(得分:0)
以无头模式启动JVM,捕获HeadlessException等。或者,编写将使用Runtime执行GUI程序的Java程序,并在控制台中解析错误的情况下重新启动。