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,并打印了根过程的 (未捕获) 错误。

您在这里看到两个异常 - 抛出的异常,然后是一个嵌套的引起异常。Java 的异常打印机会在嵌套的原因堆栈与在异常链中的更高部分已打印的堆栈相同时会打印 "... 12 更多"。也就是说,这里的 12 更多与第一个异常中已打印的第一个堆栈跟踪行相同。因此,实际上没有更多信息可供获取 - 您已经有了所有信息。

这里的关键行是最低层(根)异常的第一行。

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

我不知道错误是什么,但我会猜测可能有一个 Java 互操作调用在一个 nil 引用上。这发生在加载文件时。

在Clojure 1.10.1中,我们修改了通过clojure.main处理的未捕获异常的报告方式。如果您切换到这种方式,实际上只会看到异常消息和更长的报告,该报告将输出到临时文件中。

顺便提一下,您在这里看到的上述消息是“Exception in thread "main" Syntax error compiling" —— 这实际上是由于Clojure 1.10中所做的异常处理重整中一个微小的错误而具有误导性的。我之前为本周即将更改在Clojure 1.11中修复了一个问题,并为此准备了工单和补丁(请参阅 CLJ-2529)。基本上,在加载过程中发生的错误会被错误地报告为编译器异常。这并没有改变太多,但这是一个例子。

...