2024年Clojure调查!中分享您的想法。

欢迎!请访问关于页面以了解更多关于其功能的信息。

+2投票
错误

使用 lein run。没有任何地方提及我的 *.clj 文件,所以我不知道这个 java.lang.NullPointerException 是从哪里来的??

Exception in thread "main" Syntax error compiling at (/tmp/form-init542794133375754487.clj:1:72).
    at clojure.lang.Compiler.load(Compiler.java:7647)
    at clojure.lang.Compiler.loadFile(Compiler.java:7573)
    at clojure.main$load_script.invokeStatic(main.clj:452)
    at clojure.main$init_opt.invokeStatic(main.clj:454)
    at clojure.main$init_opt.invoke(main.clj:454)
    at clojure.main$initialize.invokeStatic(main.clj:485)
    at clojure.main$null_opt.invokeStatic(main.clj:519)
    at clojure.main$null_opt.invoke(main.clj:516)
    at clojure.main$main.invokeStatic(main.clj:598)
    at clojure.main$main.doInvoke(main.clj:561)
    at clojure.lang.RestFn.applyTo(RestFn.java:137)
    at clojure.lang.Var.applyTo(Var.java:705)
    at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
    at xinova.model$reload_dbs.invokeStatic(model.clj:78)
    at xinova.model$reload_dbs.invoke(model.clj:78)
    at xinova.core$_main.invokeStatic(core.clj:18)
    at xinova.core$_main.doInvoke(core.clj:14)
    at clojure.lang.RestFn.invoke(RestFn.java:408)
    at clojure.lang.Var.invoke(Var.java:384)
    at user$eval140.invokeStatic(form-init542794133375754487.clj:1)
    at user$eval140.invoke(form-init542794133375754487.clj:1)
    at clojure.lang.Compiler.eval(Compiler.java:7176)
    at clojure.lang.Compiler.eval(Compiler.java:7166)
    at clojure.lang.Compiler.load(Compiler.java:7635)
    ... 12 more

1 答案

+5投票

被选中
 
最佳答案

在这种情况下,Leiningen 以进程的方式调用 clojure.main,并打印出(未捕获的)错误的子进程 JVM。

您在这里看到两个异常 - 抛出的异常,然后是深层原因异常。当嵌套原因堆栈与更高层次异常已打印的堆栈相同时,Java 的异常打印器会打印“... 12 more”。也就是说,这里的12 more正是已为第一个异常打印的堆栈跟踪行。所以,实际上这里没有更多信息了 - 您已经有了所有信息。

关键行是底部最底层(根)异常的第一行。

at xinova.model$reload_dbs.invokeStatic(model.clj:78)

我不知道错误是什么,但我会猜这可能是对 nil 引用进行的 Java 交互调用。这是在加载文件时发生的。

在 Clojure 1.10.1 中,我们修改了通过 clojure.main 经过的未捕获异常的报告方式。如果您切换到那个版本,您实际上只会看到异常消息和一个较长报告,该报告会输出到临时文件。

顺便说一下,您在这里看到的最上面一行信息是 "在主线程中发生异常 错误编译",由于 Clojure 1.10 中异常处理重构中的一个细微错误,这是误导性的。我 earlier this week 准备了一个问题跟踪和补丁,用于在 Clojure 1.11 中修复它(请参阅 CLJ-2529)。基本上,在加载过程中发生的错误被错误地报告为编译器异常。这并不会改变太多,但这只是一个例子。

...