致命错误:异常 Graphics.Graphic_failure( "Cannot open display " )



我试图运行代码,但它一直显示相同的错误。 我首先使用 ocamlc -o 心形图形.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 ")

open_graph函数的字符串参数不是大小或标题,而是传递给底层图形子系统的与实现相关的信息(在 X11 中它是屏幕号(。在现代 OCaml 中,可选参数是使用标签传递的,但图形早在将此功能引入语言之前就已编写。因此,您必须在那里传递一个空字符串(如果您不想传递任何特定于底层图形子系统信息的实现(,例如,

open_graph ""

将以独立于系统的方式为您完成工作。

此外,如果要调整窗口大小,则可以使用resize_window功能。要设置标题,请使用set_window_title.

对于历史参考,传递给open_graph的字符串参数具有以下语法(它不再被记录,因此没有理由相信它会得到尊重(:

以下是 支持的图形模式规格 关于此库的 X11 实现的Graphics.open_graph: 参数 Graphics.open_graph 的格式为"显示名称" 几何",其中显示名称是 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.

在参数中放置一个"空格"以获得您想要的窗口(对于您的心形指向物,应为 200(:

let () = open_graph " 300x200"

我遇到了同样的问题,这是因为我使用了 Linux (WSL( 的 Windows 子系统,所以它需要一个 XServer 来运行图形应用程序。Ubuntu Wiki For WSL帮助解决了这个问题。我下载并安装了MobaXterm(它有免费的社区版本!(,它会自动检测WSL并在应用程序内运行它。尝试之前相同的代码,将弹出一个图形窗口!

相关内容

最新更新