【发布时间】:2012-09-11 09:03:07
【问题描述】:
当我使用 gtkada 并且我的 GUI 正在运行时,不会管理任何异常并且程序总是崩溃。消息是
此应用程序已请求运行时以异常方式终止它。
请联系应用程序的支持团队了解更多信息。
测试代码如下:
with GLib; use GLib;
with Gtk.Label; use Gtk.Label;
with Gtk.Window; use Gtk.Window;
with Gtk.Frame; use Gtk.Frame;
with Gtk.Button; use Gtk.Button;
with Gtk.Widget; use Gtk.Widget;
with Gtk.Handlers;
with Gtk.Main;
procedure gui_test_4 is
Window : Gtk_Window;
Label : Gtk_Label;
Frame : Gtk_Frame;
Button_S : Gtk_Button;
General_Error : exception;
package Handlers is new Gtk.Handlers.Callback (Gtk_Widget_Record);
package Return_Handlers is
new Gtk.Handlers.Return_Callback (Gtk_Widget_Record, Boolean);
function Delete_Event (Widget : access Gtk_Widget_Record'Class)
return Boolean is
begin
return False;
end Delete_Event;
procedure Destroy (Widget : access Gtk_Widget_Record'Class) is
begin
Gtk.Main.Main_Quit;
end Destroy;
procedure Clicked (Widget : access Gtk_Widget_Record'Class) is
begin
raise General_Error;
exception
when General_Error =>
null;
end Clicked;
begin
Gtk.Main.Init;
Gtk.Window.Gtk_New (Window);
Set_Default_Size (Window, 200, 200);
Gtk.Window.Set_Title (Window, "GUI_Test_4");
Gtk_New (Frame);
Add (Window, Frame);
Gtk_New (Button_S, "Try");
Add (Frame, Button_S);
Return_Handlers.Connect
( Window,
"delete_event",
Return_Handlers.To_Marshaller (Delete_Event'Access)
);
Handlers.Connect
( Window,
"destroy",
Handlers.To_Marshaller (Destroy'Access)
);
Handlers.Connect
( Button_S,
"clicked",
Handlers.To_Marshaller (Clicked'Access)
);
Show_All (Window);
Show (Window);
Gtk.Main.Main;
end gui_test_4;
当按钮被按下时,会引发异常,但应该在相同的过程中进行管理,而不是这样,整个程序会崩溃。
知道如何解决这个问题吗?
谢谢
【问题讨论】:
-
猜你是在windows上,尝试在没有'-mwindows'开关的情况下构建同一个项目(或从控制台运行
gui_test_4.exe > log.txt),如果你的问题消失了就发布:) -
其实我并没有使用switch,它也不起作用。它仍然崩溃。感谢您的评论。
-
嗯,奇怪(我以为你试图以某种方式访问不存在的控制台,因此崩溃了);尽管如此,我可以编译和运行
gui_test_4,而不会出现任何故障(在 Windows/Linux 上)。仅供参考,在 Windows 上我按如下方式构建它:gnatmake -g -E gui_test_4.adb -Ic:\bin\gtkada\include\gtkada -largs -LC:/bin/gtkada/lib/gtkada -lgtkada -LC:/bin/gtkada/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -lglib-2.0 -lgobject-2.0 -lgdk_pixbuf-2.0 -lpango-1.0 -
GNAT/GtkAda 版本分别为
2012-i686-pc-mingw32和2.24.2-nt,均来自 AdaCore。 -
它在另一台电脑上工作,看来问题出在我的身上。谢谢。