1

編集DISPOSE_ON_CLOSE を使用することは、私が求めているものではありません。なぜなら、「逆」の問題があるためです。JFrame を閉じても REPL は存続しますが (これは良いことです) REPL の外から起動しても存続します (これは悪いことです)。

Clojure で Swing アプリケーションを作成していますが、REPL ( Emacs ではnrepl ) と REPL の外側 (たとえばlein run、スタンドアロンの.jarを使用または実行) の両方をテストすると便利です。

Swing アプリケーションを REPL から起動していないときは、デフォルトのクローズ操作を EXIT_ON_CLOSE に設定すると便利です。例えば:

 (.setDefaultCloseOperation jframe JFrame/EXIT_ON_CLOSE)

そのため、JFrame の閉じるボタンをクリックして、アプリを終了することができます。

ただし、どうやら(これについては間違っているかもしれませんが、私は物事を見ていないと思います)これはREPLから実行すると問題があります:JFrameの閉じるボタンをクリックするとすぐに、明らかにnreplサーバーを強制終了し、新しいサーバーを再度開く必要がありますnrepl

nreplと REPL の外側の両方からテストする必要があることを知っていますが、どうすれば問題を解決できますか?

REPL から実行されていることを「検出」し、デフォルトのクローズ操作を終了に設定しないようにする必要がありますか? または?

4

2 に答える 2

0

REPL を開始するときに環境変数を使用し、その変数に応じて、閉じるときに破棄するか、閉じるときに終了するかを選択します。

スタンドアロンで起動すると、変数チェックが失敗するため、閉じるときに終了できます。

編集:

シェル内:

export REPL_MODE=true ; lein repl

Clojureコードでは:

(def repl-mode (System/getenv "REPL_MODE"))
(if (not (nil? repl-mode))
     ; in repl, set to dispose on close
     ; in standalone mode, set to exit on close
于 2013-04-11T11:47:05.533 に答える