Неустранимая ошибка: исключение Graphics.Graphic_failure («Не удается открыть отображение») - PullRequest
1 голос
/ 17 октября 2019

Я пытался запустить код, и он продолжает показывать ту же ошибку. Я начинаю с компиляции с помощью 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 ]

1 голос
/ 17 октября 2019

Строковый аргумент функции open_graph - это не размер или заголовок, а фактически зависящая от реализации информация, которая передается в базовую графическую подсистему (в X11 это номер экрана). В современном OCaml необязательные аргументы передаются с использованием меток, но Graphics была написана задолго до того, как эта функция была представлена ​​языку. Следовательно, вы должны передать туда пустую строку (если вы не хотите передавать какую-либо конкретную информацию о реализации базовой графической информации подсистемы), например,

open_graph ""

сделает всю работу за вас всистемно-независимый способ.

Кроме того, если вы хотите изменить размер окна, вы можете использовать функцию resize_window. И чтобы установить заголовок, используйте set_window_title.

. Для исторической справки строковый параметр, переданный в open_graph, имеет следующий синтаксис (он больше не задокументирован, поэтому нет оснований полагать, чточто это будет соблюдаться):

Вот спецификации графического режима, поддерживаемые Graphics.open_graph для реализации этой библиотеки в X11: аргумент для Graphics.open_graph имеет формат «геометрия отображаемого имени»где display-name - это имя дисплея X-windows для подключения, а geometry - стандартная спецификация геометрии X-windows. Два компонента разделены пробелом. Либо можно опустить, либо оба. Примеры:

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.
0 голосов
/ 18 октября 2019

Поставьте пробел в аргументе, чтобы получить желаемое окно (должно быть 200 для вашего кардиоида):

let () = open_graph " 300x200"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...