0

我正在尝试使用 Jacob 调用现有的 VFP 6 应用程序,它是 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 程序的情况下优雅地处理错误?

4

2 回答 2

2

由于您有 VFP6 的源代码,我建议您查看

系统(2335,0)

Sys 2335 用于识别程序是否在“无人值守”模式下运行,任何此类弹出对话框都会引发错误并阻止实际的“点击”确定/取消/其他按钮继续。这包括提示用户选择表的弹出窗口。

我不确定它何时可用,因为我对它的使用有限。像你一样,在 IIS 下处理 COM 服务器时,显然没有人响应。

于 2012-12-11T15:57:57.197 回答
0

以无头模式启动JVM,捕获HeadlessException 什么的。或者,编写一个 Java 程序,该程序将使用 Runtime 执行您的 GUI 程序,并在控制台中出现解析错误时重新启动。

于 2012-12-10T23:10:16.177 回答