2015-12-29 4 views

ответ

0

Используя простую тестовую программу (включенную в конце этого ответа) и закрытия окна вручную говорит нам, что следующее исключение сгенерировано:

Fatal error: exception Graphics.Graphic_failure("fatal I/O error") 

Это означает, что мы можем обрабатывать окно закрывается с помощью с помощью обработчика исключений:

try 
    (* Here goes the code opening and manipulating the window *) 
with 
    | Graphic_failure("fatal I/O error") -> 
    (* Here goes the code handling the window being closed manually*) 

Тестовая программа (вам нужно запустить ocamlc graphics.cma test.ml -o test для компиляции):

open Graphics 

let rec loop() = loop() 
let() = 
(* 
    try 
*) 
    Graphics.open_graph " 400x600"; 
    loop() 
(* 
    with 
    | Graphic_failure("fatal I/O error") -> 
     print_string "Caught exception"; 
     print_newline() 
*) 
+0

Для меня это вызывает «Graphic_failure» («Ошибка Xlib: BadDrawable (недопустимый параметр Pixmap или Window)»). ... Также мои приложения имеют некоторую графику, но управляются терминалом, что-то вроде интерпретатора, поэтому у меня нет цикл для события. У меня все еще есть цикл для команд, поэтому я мог поймать исключение после отправки команды ... Таким образом, временное решение должно соответствовать 'Graphic_failure (« фатальная ошибка ввода-вывода »)' и 'Graphic_failure (« Ошибка Xlib: BadDrawable (недопустимый параметр Pixmap или Window) ")', но как я мог знать, что нет других исключений, которые я должен поймать? –

+0

Даже если я попытаюсь поймать это исключение в моем главном, это приведет к фатальной ошибке. Я окружил код, который запускает команду (текстовую и графическую) с 'try match' для' Graphic_failure' выше, и это не помогает. Я также пытался сопоставить 'Graphic_failure _', и он по-прежнему не помогает ... –

Смежные вопросы