我正在尝试运行代码,并且一直显示相同的错误。 我首先使用ocamlc -o cardioide graphics.cma cardioide.ml进行编译,它似乎可以工作,但是随后我执行./cardioide来执行它,并出现消息致命错误:异常Graphics.Graphic_failure(“无法打开显示”)出现。 .. 我已经在互联网上搜索了所有内容,但找不到解决方案,有人可以帮我吗?
谢谢
open Graphics
let () = open_graph "300x20"
let () =
moveto 200 150;
for i = 0 to 200 do
let th = atan 1. *. float i /. 25. in
let r = 50. *. (1. -. sin th) in
lineto (150 + truncate (r *. cos th))
(150 + truncate (r *. sin th))
done;
ignore (read_key ())
错误消息:
Fatal error: exception Graphics.Graphic_failure("Cannot open display ")
答案 0 :(得分:1)
open_graph
函数的字符串参数不是大小或标题,而是实际上传递给基础图形子系统的与实现相关的信息(在X11中是屏幕编号)。在现代OCaml中,使用标签传递了可选参数,但是在此功能引入语言之前很久就编写了Graphics。因此,您必须在此处传递一个空字符串(如果您不想传递任何特定于底层图形子系统信息实现的信息),例如
open_graph ""
将以与系统无关的方式为您完成工作。
此外,如果要调整窗口大小,则可以使用resize_window
函数。要设置标题,请使用set_window_title
。
作为历史参考,传递给open_graph
的字符串参数具有以下语法(不再记录,因此没有理由相信它将被尊重):
以下是受支持的图形模式规范 此库的X11实现上的Graphics.open_graph: Graphics.open_graph的参数格式为“显示名称” 几何”,其中display-name是X窗口显示的名称 连接,几何是标准的X窗口几何 规格。这两个组件之间用空格隔开。要么 可以省略,或者两者都可以。范例:
Graphics.open_graph "foo:0" connects to the display foo:0 and creates a window with the default geometry Graphics.open_graph "foo:0 300x100+50-0" connects to the display foo:0 and creates a window 300 pixels wide by 100 pixels tall, at location (50,0) Graphics.open_graph " 300x100+50-0" connects to the default display and creates a window 300 pixels wide by 100 pixels tall, at location (50,0) Graphics.open_graph "" connects to the default display and creates a window with the default geometry.
答案 1 :(得分:0)
在参数中添加一个“空格”以获取所需的窗口(心跳应为200):
const sentryMiddleware = sentry({
forwardErrors: true,
...
})