![](/img/trans.png)
[英]How to close a emacsclient gui frame without killing the server
[英]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.