JRuby关闭AWT框架

时间:2012-07-01 03:03:32

标签: ruby jruby awt jogl

我决定查看JRuby和JOGL,看看我是否可以运行一些图形模拟器。我已经设置了类路径并正确包含了OpenGL的东西。在一些教程之后,他们建议使用AWT框架而不是Swing框架,因为Swing不支持图形加速(这正是我正在寻找的)。

然而,我无法弄清楚如何从Ruby 关闭 AWT框架。我有一个WindowAdapter,当单击框架上的关闭按钮时,它会触发Kernel.exit事件。它看起来像这样:

class Controller < WindowAdapter
  def windowClosing(event)
    Kernel.exit
  end
end

框架使用add_window_listener(Controller.new)添加此内容。单击关闭按钮时,事件成功触发,但它会发出以下错误:

Exception in thread "AWT-EventQueue-0" org.jruby.exceptions.RaiseException: (SystemExit) exit

从Frame的初始化成功调用Kernel.exit退出程序。所以我不确定为什么从监听器调用它失败了。我知道在java中你可以定义一个内联的匿名WindowAdapter,但我不知道Ruby的语法是什么。

1 个答案:

答案 0 :(得分:0)

我做了一些额外的搜索和实验,并找到了答案。它似乎是JVM中Ruby实现的一个怪癖。从WindowAdapter内部调用exitKernel.exit是没用的。

但是,调用java.lang.System.exit(0) 可以正常工作。我不确定为什么这种区别应该有所作为。我希望exit为Java系统命令的别名,但显然不希望这对可能遇到同样问题的其他人有帮助。