0

Java 用の COM ブリッジである Jacob を使用して、既存の VFP 6 アプリケーションを呼び出そうとしています。

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 は、プログラムが「無人」モードで実行されているかどうかを識別するために使用されます。そのようなポップアップ ダイアログ ボックスはエラーをスローし、実際に「OK」/「キャンセル」/「なんでも」ボタンを押して続行することを防ぎます。これには、ユーザーにテーブルを選択するよう促すポップアップ ウィンドウが含まれます。

使用が制限されていたため、いつ利用可能になったかはわかりません。あなたと同じように、IIS の下で COM サーバーを処理していて、明らかに応答する人がいない場合。

于 2012-12-11T15:57:57.197 に答える
0

JVM をヘッドレス モードで起動し、HeadlessException などをキャッチします。または、Runtime を使用して GUI プログラムを実行し、コンソールで解析されたエラーの場合に再起動する Java プログラムを作成します。

于 2012-12-10T23:10:16.177 に答える