0

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 でその構文がどのようなものになるかはわかりません。

4

1 に答える 1

0

追加の検索と実験を行い、答えを見つけました。これは、JVM での Ruby 実装の癖のようです。WindowAdapter 内からのexitorの呼び出しは役に立ちません。Kernel.exit

java.lang.System.exit(0)ただし、呼び出し機能します。違いがなぜ違いを生む必要があるのか​​ わかりません。私は Java システム コマンドへのエイリアスを期待exitしていますが、どうやらそうではないようです。

于 2012-07-02T12:18:06.287 に答える