簡體   English   中英

如何防止JFrame / EXIT_ON_CLOSE殺死nrepl服務器?

[英]How to prevent JFrame/EXIT_ON_CLOSE from killing the nrepl server?

編輯使用DISPOSE_ON_CLOSE是不是我后,因為他們,我已經得到了“倒”的問題:REPL保持活着當我關閉的JFrame(這是好的),但是它從REPL外launced時保持活着(不好)。

我在Clojure中編寫了一個Swing應用程序,發現從REPL(在Emacs下為nrepl )和從REPL外部進行測試都很方便(例如,通過使用lein run或通過運行獨立的.jar )。

當我不從REPL啟動我的Swing應用程序時,發現將默認關閉操作設置為EXIT_ON_CLOSE很方便。 例如:

 (.setDefaultCloseOperation jframe JFrame/EXIT_ON_CLOSE)

因此,我可以單擊JFrame的關閉按鈕,並完成我的應用程序。

但是顯然(我可能會誤解,但我認為我沒有看到任何事情),這在從REPL運行時是有問題的:一旦我單擊JFrame的關閉按鈕,我顯然會殺死nrepl服務器並必須重新打開一個新的nrepl

知道我需要同時從nrepl和任何REPL外部進行測試,如何解決我的問題?

我應該“檢測”我正在從REPL運行,然后不將默認關閉操作設置為退出嗎? 要么?

JFrame.EXIT_ON_CLOSE通過調用System.exit()退出應用程序,該應用程序終止當前正在運行的Java虛擬機 由於您的應用程序和REPL都在同一個JVM中運行(因為您是從REPL啟動應用程序的),這意味着REPL也將被殺死。

而是嘗試使用:

(.setDefaultCloseOperation jframe JFrame/DISPOSE_ON_CLOSE)

當您單擊JFrame的關閉按鈕時,這還將隱藏(並放置)JFrame,但保持JVM(從而使您的REPL)運行。

啟動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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM