致命错误:Exception Graphics.Graphic_failure(“无法打开显示”)

时间:2019-10-17 16:31:36

标签: ocaml

我正在尝试运行代码,并且一直显示相同的错误。 我首先使用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 ")

2 个答案:

答案 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,
  ...
})