【发布时间】:2017-02-01 14:31:39
【问题描述】:
lein repl 在一个项目上:
user=> (javax.swing.JFrame. "My Frame")
SocketException Connection reset
java.net.SocketInputStream.read (SocketInputStream.java:209)
java.net.SocketInputStream.read (SocketInputStream.java:141)
java.io.BufferedInputStream.fill (BufferedInputStream.java:246)
java.io.BufferedInputStream.read (BufferedInputStream.java:265)
java.io.FilterInputStream.read (FilterInputStream.java:83)
java.io.PushbackInputStream.read (PushbackInputStream.java:139)
clojure.tools.nrepl.bencode/read-byte (bencode.clj:84)
clojure.tools.nrepl.bencode/read-byte (bencode.clj:-1)
clojure.tools.nrepl.bencode/read-token (bencode.clj:236)
clojure.tools.nrepl.bencode/read-token (bencode.clj:234)
clojure.tools.nrepl.bencode/read-bencode (bencode.clj:254)
clojure.tools.nrepl.bencode/read-bencode (bencode.clj:251)
Bye for now!
但是,在没有项目的新项目/lein repl 上,它确实有效。
user=> (javax.swing.JFrame. "My Frame")
#object[javax.swing.JFrame 0x2ee69c3e "javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=My Frame,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]"]
我更新了我的 JDK 和 JRE,但没有帮助。
我最初在尝试使用 seesaw 时注意到了它(其中 seesaw 和 Clojure 是我唯一的项目依赖项)。它也崩溃了,然后我注意到即使尝试直接使用 Swing 也会导致崩溃。从依赖项中删除跷跷板使其再次工作。现在我的项目还有其他依赖项(它们都与 AWT/Swing 无关,它们都是:clojure 1.8.0、clj-http 2.3.0、data.json 0.2.6、camel-snake-kebab 0.4.0 , 和 clj-time 0.13.0) 并且它再次发生。我会试试看能不能找到最小的情况。
编辑:最小的情况是只有 Clojure 和 [clj-http "2.3.0"] 或只有 Clojure 和跷跷板。
我还尝试确保我从 EDT 运行(使用 EventQueue.invokeLater),但没有帮助,程序崩溃了。
然后我尝试只使用 AWT (java.awt.Frame.) 并遇到同样的崩溃。
最后,fwiw,这发生在:
REPL-y 0.3.7,nREPL 0.2.12
Clojure 1.8.0
Java HotSpot(TM) 64 位服务器 VM 1.8.0_121-b13
Windows 10 专业版 x64
我现在也尝试制作一个 uberjar,它似乎工作正常。
所以它似乎只会使lein repl 和 CIDER 的 REPL 崩溃(所以我假设是 nREPL?)。
我该如何诊断和解决这个问题?
【问题讨论】:
-
@HovercraftFullOfEels afaik lein 创建了 2 个 JVM,一个用于自己,一个用于程序,当程序崩溃并关闭连接时会发生这种情况。我认为无论哪种方式都无关紧要,因为唯一的共同点是异常类型。
-
我不是这类异常的专家,这就是为什么我没有“dup-hammer”你的问题,但我知道当套接字从另一侧关闭时会发生异常.
标签: java swing clojure awt leiningen