【问题标题】:AWT/Swing crashes the REPLAWT/Swing 使 REPL 崩溃
【发布时间】: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


【解决方案1】:

我无法在最小项目上重现它

(defproject km "0.1.0-SNAPSHOT"
   :dependencies [
     [org.clojure/clojure "1.8.0"]
     [clj-http "2.3.0"]
   ]
)

Clojure 1.8.0 Java HotSpot(TM) 64 位服务器 VM 1.8.0_112-b16 REPL-y 0.3.7,nREPL 0.2.12 macOS 塞拉利昂

'project.clj' 中有更多的行吗?

【讨论】:

  • 我没有。我也做了一个项目只是为了测试,但它崩溃了。非常感谢您对其进行测试。也许我应该尝试重新安装 JVM+JDK,而不仅仅是更新。
  • 不幸的是它没有帮助。我认为它越来越多地与 nREPL 有关。再次感谢!
  • 不客气!似乎这是相关的github.com/clojure-emacs/cider-nrepl/issues/259你能检查你的 lein 个人资料吗?
  • 我没有这样的东西。事实上,我什至无法创建框架。仅仅调用构造函数就会导致程序崩溃。
  • 我也无法在 Virtual Box 中的 Windows 上重现它。您是否尝试过卸载 Leinengen?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
相关资源
最近更新 更多