这是我关于stackoverflow的第一个问题。
我在网上搜索无济于事,我真的无法弄清楚出了什么问题,所以我们走了。
我正在尝试向Marionnet添加一个对话框窗口。窗口信息主要包含在glade文件中,其中一些位从代码中修改。 lablgtk是允许gtk2(以及因此glade生成的文件)与ocaml语言一起使用的框架。 应用程序已成功编译,但它会在启动时生成此运行时错误:
(marionnet.byte:5384): libglade-CRITICAL **: glade_xml_build_interface: assertion `wid != NULL' failed
Fatal error: exception Failure("Glade error: GtkDialog:dialog_RELATIVIZATION is not accessible.")
Raised at file "pervasives.ml", line 22, characters 22-33
Called from file "gui.ml", line 617, characters 9-85
Called from file "gui/gui_menubar_MARIONNET.ml", line 356, characters 17-49
Called from unknown location
Called from unknown location
错误表明类构造函数不存在或类似的东西,但我多次检查,我没有发现我使用的标识符中的任何拼写错误。我在这里错过了什么?异常实际上意味着什么?
为了证明没有拼写错误或缺少标识符,我将向您展示文件内容
文件gui.ml由lablgladecc2生成,它读取gui.xml(glade文件)的内容。这是gui.xml的摘录:
<widget class="GtkDialog" id="dialog_RELATIVIZATION">
<property name="visible">True</property>
<property name="title" translatable="yes">Relativization</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="destroy_with_parent">True</property>
<property name="icon">marionnet-launcher.png</property>
<property name="type_hint">dialog</property>
<child internal-child="vbox">
[...]
所以id&#34; dialog_RELATIVIZATION&#34;在那儿。实际上,生成的gui.ml文件具有正确的类和方法:
[...]
class dialog_RELATIVIZATION ?(file="gui.glade.patched") ?domain ?autoconnect(*=true*) () =
let xmldata = Glade.create ~file ~root:"dialog_RELATIVIZATION" ?domain () in
object (self)
inherit Glade.xml ?autoconnect xmldata
val toplevel =
new GWindow.dialog_any (GtkWindow.Dialog.cast
(Glade.get_widget_msg ~name:"dialog_RELATIVIZATION" ~info:"GtkDialog" xmldata))
method toplevel = toplevel
val dialog_RELATIVIZATION =
new GWindow.dialog_any (GtkWindow.Dialog.cast
(Glade.get_widget_msg ~name:"dialog_RELATIVIZATION" ~info:"GtkDialog" xmldata))
method dialog_RELATIVIZATION = dialog_RELATIVIZATION
[...]
这是我尝试访问窗口的代码:
let rel_dialog = new Gui.dialog_RELATIVIZATION () in
rel_dialog#toplevel#set_title (s_ "Relativization");
rel_dialog#label_frequency#set_label (s_ "Frequency");
rel_dialog#label_convergence#set_label (s_ "Convergence");
rel_dialog#checkb_existing_machines#set_label (s_ "Apply to existing machines");
谷歌没有帮助我,我没有找到关于lablgtk的好文档。有谁知道异常意味着什么以及原因是什么?