gpt4 book ai didi

java - Jshell 错误 : java. lang.NullPointerException: charsetName

转载 作者:行者123 更新时间:2023-11-30 10:08:08 27 4
gpt4 key购买 nike

我正在尝试使用 JDK11 提供的 JShell 来运行一些简单的命令。但是当我输入时:

jshell>System.out.println("Hello World!");

它给我错误:

Exception in thread "main" java.lang.NullPointerException: charsetName
at java.base/java.lang.String.<init>(String.java:464)
at java.base/java.lang.String.<init>(String.java:537)
at jdk.internal.le/jdk.internal.jline.extra.AnsiInterpretingOutputStream.write(AnsiInterpretingOutputStream.java:92)
at java.base/java.io.OutputStream.write(OutputStream.java:157)
at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:233)
at java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:312)
at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:316)
at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:153)
at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:254)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.flush(ConsoleReader.java:1052)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.accept(ConsoleReader.java:2029)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:2756)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:2383)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:2371)
at jdk.jshell/jdk.internal.jshell.tool.ConsoleIOContext.readLine(ConsoleIOContext.java:142)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.getInput(JShellTool.java:1261)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.run(JShellTool.java:1174)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:975)
at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder.start(JShellToolBuilder.java:254)
at jdk.jshell/jdk.internal.jshell.tool.JShellToolProvider.main(JShellToolProvider.java:120)

然后结束JShell程序。

我的java版本如下:

java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

最佳答案

事实证明,在产生新的 CMD 时打印 Activity 代码页是罪魁祸首。例如,尝试运行 cmd.exe 并查看是否得到类似的输出:

Microsoft Windows [Version 10.0.17763.253]
(c) 2018 Microsoft Corporation. All rights reserved.
Active code page: 65001

这在写了一行代码如 import 语句或上述打印 hello world 的情况后崩溃。 JShell 显然期待其他东西。

Activity 代码页的额外输出似乎也甩开了很多其他解析器。我实际上是通过一个不同的异常遇到这个问题的,该异常发生在运行 mvn release 时。事实证明,Maven 的发布插件对 cmd.exe 进行了大量 shell 处理并尝试解析输出。这会产生像这样的有趣异常:

Caused by: java.net.URISyntaxException: Illegal character in scheme name at index 6: Active%20code%20page:%2065001
C:/Users/USER_NAME/git/SOME_PROJECT
at java.net.URI$Parser.fail (URI.java:2915)
at java.net.URI$Parser.checkChars (URI.java:3086)
at java.net.URI$Parser.parse (URI.java:3112)
at java.net.URI.<init> (URI.java:600)
at java.net.URI.create (URI.java:881)
at org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusConsumer.resolveURI (GitStatusConsumer.java:249)

解决方案

我必须通过运行 chcp 65001 命令的 regedit 禁用 AutoRun。这可以在以下任一路径中找到:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

以下 SO 答案将提供更多相关信息,并且是该问题的最终答案: https://stackoverflow.com/a/48203959/540873

注意 AutoRun 中的任何其他命令也可能会发生这种情况,这些命令会 ECHO 一些东西,在我的例子中它只是 chcp 命令。


Java 版本供引用:

java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)

关于java - Jshell 错误 : java. lang.NullPointerException: charsetName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53900918/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com