Запретить VFP показывать диалоговые окна при возникновении ошибок

Я пытаюсь вызвать существующее приложение VFP 6, используя Jacob, который является мостом COM для Java.

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 не найден, файл используется другим пользователем и т. д.) всплывает окно с графическим интерфейсом и останавливает выполнение программы до тех пор, пока я не отменю ее с помощью мыши. Я хочу, чтобы эта программа работала на сервере без взаимодействия с пользователем, поэтому это не сработает.

Как я могу изящно обрабатывать ошибки, желательно без внесения изменений в программу VFP 6?


person rancidfishbreath    schedule 10.12.2012    source источник
comment
Есть ли у вас доступ к коду VFP6, чтобы, возможно, перестроить его?   -  person DRapp    schedule 11.12.2012
comment
Да, у меня есть доступ к коду.   -  person rancidfishbreath    schedule 11.12.2012


Ответы (2)


Поскольку у вас есть исходный код VFP6, я бы посоветовал изучить

СИС(2335,0)

Sys 2335 используется для определения того, работает ли программа в «автоматическом» режиме, любые такие всплывающие диалоговые окна будут вызывать ошибку и предотвращать фактическое «нажатие» кнопки «ОК», «Отмена» или любой другой кнопки для продолжения. Это включает в себя всплывающее окно, предлагающее пользователю выбрать стол.

Я не уверен, когда он был доступен, поскольку я использовал его ограниченно. Как и вы, когда имеете дело с COM-сервером под IIS, и, очевидно, никто не отвечает.

person DRapp    schedule 11.12.2012
comment
Это именно то, что я ищу. - person rancidfishbreath; 11.12.2012

Запустите JVM в безголовом режиме, поймайте HeadlessException или что-то в этом роде. Или напишите программу на Java, которая будет выполнять вашу программу с графическим интерфейсом с помощью среды выполнения и перезапускаться в случае ошибок анализа в консоли.

person idonnie    schedule 10.12.2012
comment
Исключения HeadlessException не вызываются пользовательскими интерфейсами, работающими за пределами виртуальной машины, такими как запускаемые Runtime.exec или OLE. И в консоли ошибок нет. - person rancidfishbreath; 11.12.2012