当我尝试在IOKE shell中执行代码时,它会崩溃。
>ioke
iik> "Hello World" println
Exception in thread "main" java.lang.NullPointerException
at ioke.lang.IokeIO$2.activate(IokeIO.java:129)
at ioke.lang.TypeCheckingNativeMethod.activate(TypeCheckingNativeMethod.java:50)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
at ioke.lang.Message.getEvaluatedArgument(Message.java:979)
at ioke.lang.Message.getEvaluatedArgument(Message.java:983)
at ioke.lang.FlowControlBehavior$9.activate(FlowControlBehavior.java:379)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Locals$1.activate(Locals.java:63)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWith(Message.java:1093)
at ioke.lang.LexicalBlock.activate(LexicalBlock.java:198)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.LexicalBlock$2.activate(LexicalBlock.java:86)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:1011)
at ioke.lang.FileSystem$7.activate(FileSystem.java:308)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
at ioke.lang.ConditionsBehavior$4.activate(ConditionsBehavior.java:342)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Locals$1.activate(Locals.java:63)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
at ioke.lang.Message.getEvaluatedArgument(Message.java:979)
at ioke.lang.Message.getEvaluatedArgument(Message.java:983)
at ioke.lang.FlowControlBehavior$7.activate(FlowControlBehavior.java:298)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Locals$1.activate(Locals.java:63)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWithoutExplicitReceiver(Message.java:1145)
at ioke.lang.ConditionsBehavior$4.activate(ConditionsBehavior.java:342)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Locals$1.activate(Locals.java:63)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateCompleteWith(Message.java:1093)
at ioke.lang.DefaultMethod.activate(DefaultMethod.java:283)
at ioke.lang.IokeObject.activate(IokeObject.java:1053)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:1038)
at ioke.lang.IokeObject.getOrActivate(IokeObject.java:514)
at ioke.lang.IokeObject.perform(IokeObject.java:659)
at ioke.lang.IokeObject.perform(IokeObject.java:592)
at ioke.lang.IokeObject.perform(IokeObject.java:522)
at ioke.lang.Message.sendTo(Message.java:999)
at ioke.lang.Message.evaluateComplete(Message.java:1066)
at ioke.lang.Runtime.evaluateString(Runtime.java:525)
at ioke.lang.Main.main(M
ain.java:149)
导致此错误的原因是什么?我使用Windows 10,设置了我的IOKE_HOME和JAVA_HOME env变量(否则首先不会调用REPL)。任何帮助将不胜感激。
答案 0 :(得分:0)
我怀疑这与Ioke尝试使用一些Java API来检索用户的主目录有关。我发现,尽管设置了HOME
环境变量,但以没有主目录的任何用户身份运行Ioke时,在Linux上仍会重现该问题。我可以通过设置JAVA_OPTS
环境变量来解决此问题:
$ JAVA_OPTS="-Duser.home=$PWD" ioke
请注意,其他基于Java的编程语言(例如Kotlin)也会发生类似的问题,并且有时可以应用相同的解决方法。显然,有人在Java API中做出了一个非常糟糕的设计决策。
请注意,自2011年以来,Ioke已被完全废弃,并且将来不太可能获得任何更新或支持。