Events 检测窗口关闭OCaml图形
我在图形文档中没有找到有关窗口关闭检测的详细信息。如何检测它,以便在关闭时触发操作Events 检测窗口关闭OCaml图形,events,window,ocaml,Events,Window,Ocaml,我在图形文档中没有找到有关窗口关闭检测的详细信息。如何检测它,以便在关闭时触发操作 谢谢。使用一个简单的测试程序(包括在本答案末尾)并手动关闭窗口,告诉我们出现了以下异常: Fatal error: exception Graphics.Graphic_failure("fatal I/O error") 这意味着我们可以使用异常处理程序来处理正在关闭的窗口: try (* Here goes the code opening and manipulating the window *)
谢谢。使用一个简单的测试程序(包括在本答案末尾)并手动关闭窗口,告诉我们出现了以下异常:
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来编译它):
对我来说,它引发了图形故障(“Xlib错误:BadDrawable(无效的Pixmap或窗口参数)”)
。。。我的应用程序也有一些图形,但是终端控制的,有点像解释器,所以我没有事件循环。我仍然有一个命令循环,所以我可以在命令发送后捕获异常。。。因此,一个临时解决方案是匹配Graphic\u故障(“致命I/O错误”)
和Graphic\u故障(“Xlib错误:BadDrawable(无效的Pixmap或窗口参数)”)
,但我怎么知道我不应该捕获其他异常呢?即使我尝试在main中捕获这些异常,也会导致致命错误。对于上面的Graphic\u故障
,我用try match
包围了启动命令(文本和图形命令)的代码,它没有任何帮助。我也尝试过匹配图形\u故障
,但仍然没有帮助。。。
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 ()
*)