JRuby と JOGL を調べて、グラフィックス sim を実行できるかどうかを確認することにしました。クラスパスがセットアップされ、OpenGL が適切に含まれています。いくつかのチュートリアルに従って、Swing ではなく AWT フレームを使用することをお勧めします。これは、Swing がグラフィックス アクセラレーションをサポートしていないためです (これが本当に私が探しているものです)。
ただし、Ruby から AWT フレームを閉じる方法がわかりません。Kernel.exit
フレームの閉じるボタンがクリックされたときにイベントを発生させる WindowAdapter があります。次のようになります。
class Controller < WindowAdapter
def windowClosing(event)
Kernel.exit
end
end
Frame はこれを で追加しadd_window_listener(Controller.new)
ます。閉じるボタンをクリックするとイベントは正常に発生しますが、次のエラーが発生します。
Exception in thread "AWT-EventQueue-0" org.jruby.exceptions.RaiseException: (SystemExit) exit
フレームの初期化から Kernel.exit を呼び出すと、プログラムが正常に終了します。そのため、リスナーからの呼び出しが失敗する理由がわかりません。Java で匿名の WindowAdapter をインラインで定義できることは知っていますが、Ruby でその構文がどのようなものになるかはわかりません。