发生Clojure NullPointerException错误

发生Clojure NullPointerException错误,clojure,Clojure,当我加载Clojure项目时,我遇到了一个奇怪的错误,我想知道为什么会发生这种情况,以及为什么我的变通方法有效: 当我用lein repl启动clojure项目时,我得到一个NullpointerException错误,它加载到我的一个clojure文件(其中包含许多函数)中。我的解决方法是注释掉文件中最后3个函数的主要内容,然后加载项目。当没有错误消息时,我退出它,取消对部分的注释(有效地恢复初始文件),它最终加载并且不显示任何错误消息 奇怪的是,它第二次加载,但不是第一次加载。 这会发生在其

当我加载Clojure项目时,我遇到了一个奇怪的错误,我想知道为什么会发生这种情况,以及为什么我的变通方法有效:

当我用
lein repl
启动clojure项目时,我得到一个NullpointerException错误,它加载到我的一个clojure文件(其中包含许多函数)中。我的解决方法是注释掉文件中最后3个函数的主要内容,然后加载项目。当没有错误消息时,我退出它,取消对部分的注释(有效地恢复初始文件),它最终加载并且不显示任何错误消息

奇怪的是,它第二次加载,但不是第一次加载。 这会发生在其他人身上吗?我没有包括我的代码,因为它有600多行不同的函数

编辑:提供堆栈跟踪和完整报告。似乎只有
-main
函数导致了错误。如果我注释掉内容(只留下标题)并运行
lein repl
,它编译得很好。然后我取消对内容的注释,运行
lein repl
,没有NPE。只是过了一会儿,事情又发生了

(defn -main [prev curr act cstm]
  (if (or (nil? prev) (empty? prev))
    curr
    (let [other-prev-concepts (filter #(not(is-object %)) prev)
          prev (filter #(is-object %) prev)    
          newpstm prev 
          newpstm (filter #(is-object %) newpstm) 
          newpstm (adjust-poses-from-camera-move (first act) newpstm)
          other-curr-concepts (filter #(not(is-object %)) curr)
          curr-cycle (filter #(is-object %) curr)
        results (if (< (count curr-cycle) (count newpstm))
          (map reverse (get (find-alignment curr-cycle newpstm) :assignments))
          (get (find-alignment newpstm curr-cycle) :assignments))
        aligned (filter #(< (apply get-distance %) maxWeight*) results)
        mapped-pstm (map second aligned)

          pstm-map (convert-to-map-of-map curr-cycle)
          prev-map (convert-to-map-of-map newpstm)
          newprev
          (loop [remaining aligned
                result {}]
            (if (empty? remaining)
                result
                (let [[head & others] remaining
                      old (second (first head)) 
                      new (second (second head)) 
                      mapped-old (map second (map first aligned))
                      new-fields (get pstm-map new)
                      updated-prev (assoc result old new-fields) 
                      conf (get-in prev-map [old :*conf])
                      new-conf (min (+ conf confInc*) 1)
                      updated-prev (assoc-in updated-prev [old :*conf] new-conf)
                      children (map second (filter #(and (= old (last %)) (= 'attached (first %))) cstm) ) 
                      children-to-update (remove (set mapped-old) children) 
                      updated-prev (update-children (get prev-map old) (get pstm-map new) 
                                      children-to-update prev-map updated-prev cstm mapped-old)
                      ]
                    (recur others updated-prev)
                      )
                ))
          mapped-prev (map second (map first aligned))
          newprev (convert-map-to-list newprev)
          newprev (disapps act newpstm curr-cycle newprev cstm)
        newprev (apps mapped-pstm curr-cycle newprev)
        ]
        (concat newprev other-curr-concepts)
      )
    )
)
完整报告:

{:clojure.main/message
 "Syntax error (NullPointerException) compiling at (/tmp/form-init6713682379458716776.clj:1:73).\nnull\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 73,
  :clojure.error/source "form-init6713682379458716776.clj",
  :clojure.error/path "/tmp/form-init6713682379458716776.clj",
  :clojure.error/class java.lang.NullPointerException},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message
    "Syntax error compiling at (/tmp/form-init6713682379458716776.clj:1:73).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 73,
     :clojure.error/source "/tmp/form-init6713682379458716776.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.lang.ExceptionInInitializerError,
    :at [java.lang.Class forName0 "Class.java" -2]}
   {:type java.lang.NullPointerException,
    :at [clojure.core$alias invokeStatic "core.clj" 4272]}],
  :trace
  [[clojure.core$alias invokeStatic "core.clj" 4272]
   [clojure.core$load_lib invokeStatic "core.clj" 5958]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 436]
   [proj.anchoring__init load nil 4]
   [proj.anchoring__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 398]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [proj.core__init load nil 47]
   [proj.core__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 398]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [user$eval5 invokeStatic "form-init6713682379458716776.clj" 1]
   [user$eval5 invoke "form-init6713682379458716776.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.Compiler loadFile "Compiler.java" 7574]
   [clojure.main$load_script invokeStatic "main.clj" 475]
   [clojure.main$init_opt invokeStatic "main.clj" 477]
   [clojure.main$init_opt invoke "main.clj" 477]
   [clojure.main$initialize invokeStatic "main.clj" 508]
   [clojure.main$null_opt invokeStatic "main.clj" 542]
   [clojure.main$null_opt invoke "main.clj" 539]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :phase :compile-syntax-check}}
{:clojure.main/message
“在(/tmp/form-init6713682379458716776.clj:1:73)处编译时出现语法错误(NullPointerException)。\nnull\n”,
:clojure.main/triage
{:clojure.error/phase:编译语法检查,
:clojure.error/第1行,
:clojure.error/column 73,
:clojure.error/source“form-init6713682379458716776.clj”,
:clojure.error/path“/tmp/form-init6713682379458716776.clj”,
:clojure.error/class java.lang.NullPointerException},
:clojure.main/trace
{:via
[{:type clojure.lang.Compiler$CompilerException,
:信息
“编译时出现语法错误(/tmp/form-init6713682379458716776.clj:1:73)。”,
:数据
{:clojure.error/phase:编译语法检查,
:clojure.error/第1行,
:clojure.error/column 73,
:clojure.error/source“/tmp/form-init6713682379458716776.clj”},
:在[clojure.lang.Compiler load“Compiler.java”7648]处
{:键入java.lang.ExceptionInInitializeError,
:在[java.lang.Class forName0“Class.java”-2]}
{:键入java.lang.NullPointerException,
:在[clojure.core$alias invokeStatic“core.clj”4272]处,
:跟踪
[[clojure.core$alias invokeStatic“core.clj”4272]
[clojure.core$load_lib invokeStatic“core.clj”5958]
[clojure.core$load_lib doInvoke“core.clj”5928]
[clojure.lang.RestFn应用于“RestFn.java”142]
[clojure.core$apply invokeStatic“core.clj”667]
[clojure.core$load_libs invokeStatic“core.clj”5985]
[clojure.core$load_libs doInvoke“core.clj”5969]
[clojure.lang.RestFn applyTo“RestFn.java”137]
[clojure.core$apply invokeStatic“core.clj”667]
[clojure.core$require invokeStatic“core.clj”6007]
[clojure.core$require doInvoke“core.clj”6007]
[clojure.lang.RestFn调用“RestFn.java”436]
[项目锚定初始荷载为零4]
[项目锚定初始值为零-1]
[java.lang.Class forName0“Class.java”-2]
[java.lang.Class for name“Class.java”398]
[clojure.lang.RT classForName“RT.java”2211]
[clojure.lang.RT classForName“RT.java”2220]
[clojure.lang.RT loadClassForName“RT.java”2239]
[clojure.lang.RT加载“RT.java”449]
[clojure.lang.RT加载“RT.java”424]
[clojure.core$load$fn__6839调用“core.clj”6126]
[clojure.core$load invokeStatic“core.clj”6125]
[clojure.core$load doInvoke“core.clj”6109]
[clojure.lang.RestFn调用“RestFn.java”408]
[proj.core\uuu init load nil 47]
[proj.core_uuinit nil-1]
[java.lang.Class forName0“Class.java”-2]
[java.lang.Class for name“Class.java”398]
[clojure.lang.RT classForName“RT.java”2211]
[clojure.lang.RT classForName“RT.java”2220]
[clojure.lang.RT loadClassForName“RT.java”2239]
[clojure.lang.RT加载“RT.java”449]
[clojure.lang.RT加载“RT.java”424]
[clojure.core$load$fn__6839调用“core.clj”6126]
[clojure.core$load invokeStatic“core.clj”6125]
[clojure.core$load doInvoke“core.clj”6109]
[clojure.lang.RestFn调用“RestFn.java”408]
[clojure.core$load_one invokeStatic“core.clj”5908]
[clojure.core$load_one invoke“core.clj”5903]
[clojure.core$load\u lib$fn\u 6780调用“core.clj”5948]
[clojure.core$load_lib invokeStatic“core.clj”5947]
[clojure.core$load_lib doInvoke“core.clj”5928]
[clojure.lang.RestFn应用于“RestFn.java”142]
[clojure.core$apply invokeStatic“core.clj”667]
[clojure.core$load_libs invokeStatic“core.clj”5985]
[clojure.core$load_libs doInvoke“core.clj”5969]
[clojure.lang.RestFn applyTo“RestFn.java”137]
[clojure.core$apply invokeStatic“core.clj”667]
[clojure.core$require invokeStatic“core.clj”6007]
[clojure.core$require doInvoke“core.clj”6007]
[clojure.lang.RestFn调用“RestFn.java”408]
[用户$eval5 invokeStatic“form-init6713682379458716776.clj”1]
[用户$eval5调用“form-init6713682379458716776.clj”1]
[clojure.lang.Compiler eval“Compiler.java”7177]
[clojure.lang.Compiler eval“Compiler.java”7166]
[clojure.lang.Compiler eval“Compiler.java”7166]
[clojure.lang.Compiler加载“Compiler.java”7636]
[clojure.lang.Compiler加载文件“Compiler.java”7574]
[clojure.main$load_脚本invokeStatic“main.clj”475]
[clojure.main$init_opt invokeStatic“main.clj”477]
[clojure.main$init_opt invoke“main.clj”477]
[clojure.main$initializeinvokestatic“main.clj”508]
[clojure.main$null_opt invokeStatic“main.clj”542]
[clojure.main$null_opt invoke“main.clj”539]
[clojure.main$main invokeStatic“main.clj”664]
[clojure.main$main doInvoke“main.clj”616]
[clojure.lang.RestFn applyTo“RestFn.java”137]
[clojure.lang.Var applyTo“Var.java”705]
[clojure.main“main.java”40],
:阶段:编译语法检查}

您能更具体一点吗?您是否要对行进行注释,启动
lein repl
,关闭它,恢复注释,启动
lein repl
,然后它就可以工作了?第三次发生了什么
{:clojure.main/message
 "Syntax error (NullPointerException) compiling at (/tmp/form-init6713682379458716776.clj:1:73).\nnull\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 73,
  :clojure.error/source "form-init6713682379458716776.clj",
  :clojure.error/path "/tmp/form-init6713682379458716776.clj",
  :clojure.error/class java.lang.NullPointerException},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message
    "Syntax error compiling at (/tmp/form-init6713682379458716776.clj:1:73).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 73,
     :clojure.error/source "/tmp/form-init6713682379458716776.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.lang.ExceptionInInitializerError,
    :at [java.lang.Class forName0 "Class.java" -2]}
   {:type java.lang.NullPointerException,
    :at [clojure.core$alias invokeStatic "core.clj" 4272]}],
  :trace
  [[clojure.core$alias invokeStatic "core.clj" 4272]
   [clojure.core$load_lib invokeStatic "core.clj" 5958]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 436]
   [proj.anchoring__init load nil 4]
   [proj.anchoring__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 398]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [proj.core__init load nil 47]
   [proj.core__init <clinit> nil -1]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 398]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForName "RT.java" 2220]
   [clojure.lang.RT loadClassForName "RT.java" 2239]
   [clojure.lang.RT load "RT.java" 449]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [user$eval5 invokeStatic "form-init6713682379458716776.clj" 1]
   [user$eval5 invoke "form-init6713682379458716776.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.Compiler loadFile "Compiler.java" 7574]
   [clojure.main$load_script invokeStatic "main.clj" 475]
   [clojure.main$init_opt invokeStatic "main.clj" 477]
   [clojure.main$init_opt invoke "main.clj" 477]
   [clojure.main$initialize invokeStatic "main.clj" 508]
   [clojure.main$null_opt invokeStatic "main.clj" 542]
   [clojure.main$null_opt invoke "main.clj" 539]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :phase :compile-syntax-check}}