首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure -“线程中的异常"main”java.lang.ClassCastException: seesaw.core.proxy“

Clojure -“线程中的异常"main”java.lang.ClassCastException: seesaw.core.proxy“
EN

Stack Overflow用户
提问于 2013-03-01 19:46:40
回答 2查看 650关注 0票数 2

我目前正在学习Clojure,而且我以前没有使用过任何Lisp方言。

所以,在做一个简单的图形用户界面测试时,我得到了一个ClassCastException。

core.clj文件:

代码语言:javascript
复制
(ns veg-gui.core)
(use 'seesaw.core)

(def f (frame :title "Hello world!") )


(defn -main [& args] 
  ( (config! f :content "Hello world.")
    (-> f pack! show!) ) )

完整的错误。

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: seesaw.core.proxy$javax
.swing.JFrame$Tag$a79ba523 cannot be cast to clojure.lang.IFn
        at veg_gui.core$_main.doInvoke(core.clj:8)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at clojure.lang.Var.invoke(Var.java:411)
        at user$eval5181.invoke(NO_SOURCE_FILE:1)
        at clojure.lang.Compiler.eval(Compiler.java:6511)
        at clojure.lang.Compiler.eval(Compiler.java:6501)
        at clojure.lang.Compiler.eval(Compiler.java:6477)
        at clojure.core$eval.invoke(core.clj:2797)
        at clojure.main$eval_opt.invoke(main.clj:297)
        at clojure.main$initialize.invoke(main.clj:316)
        at clojure.main$null_opt.invoke(main.clj:349)
        at clojure.main$main.doInvoke(main.clj:427)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.lang.Var.invoke(Var.java:419)
        at clojure.lang.AFn.applyToHelper(AFn.java:163)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.main.main(main.java:37)

(另外,我正在用lein run运行这段代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-01 19:55:56

代码语言:javascript
复制
(defn -main [& args] 
  ( (config! f :content "Hello world.")
    (-> f pack! show!) ) )

你的函数体周围有一组多余的括号。请比较以下内容:

代码语言:javascript
复制
(defn -main [& args] 
  (config! f :content "Hello world.")
  (-> f pack! show!))
票数 4
EN

Stack Overflow用户

发布于 2013-03-01 19:54:27

Seesaw没有包含在Clojure核心中,因此,就像在任何其他编程语言中一样,您需要将该库包含到您的项目中。使用Leiningen很容易-只需将[seesaw "x.y.z"] (其中"x.y.z“是版本)添加到您的project.clj。有关home page项目的更多详细信息和示例。

更新。我更关注你的异常和你的代码。您在以下行有一个错误:

代码语言:javascript
复制
( (config! f :content "Hello world.")

与大多数其他语言不同,在Lisp中,方括号的作用比对参数进行分组更重要。当你写的时候:

代码语言:javascript
复制
(foo ...)

foo应为function (IFn的实例)。因此,Clojure尝试将表达式(config! f :content "Hello world.")视为函数,但事实并非如此,因此会抛出异常。要修复它,只需删除额外的括号:

代码语言:javascript
复制
(defn -main [& args] 
  (config! f :content "Hello world.")
  (-> f pack! show!))

但是,请注意,在Clojure中顺序编写表达式并不总是可行的。通常情况下,您必须使用do一个接一个地执行几个操作。幸运的是,defn隐式包含do,因此不需要显式包含。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15156989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档