Jshell падает, когда я нажимаю кнопку BackSpace в Windows cmd

когда я открываю окна cmd и набираю jshell , это работает, но когда я что-то пишу . всякий раз, когда я нажимаю клавишу BackSpace. например, если я хочу удалить неправильное письмо. jshell вылетает с ошибкой ниже, я использую windows 10, а C:\Program Files\Java\jdk-11.0.1 - мой единственный путь в окнах System Environment variables, я также использую cmd в качестве терминала. вот ошибка:

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.readLine(ConsoleReader.java:3259)
        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)

person Geco    schedule 29.05.2019    source источник
comment
Стоит упомянуть такие детали, как OS, над которой вы работаете, shell, с которой вы работаете, а также jshell версию. Возможно, это ошибка JDK.   -  person Naman    schedule 29.05.2019
comment
В моем случае это происходит только с PowerShell.   -  person lucasvc    schedule 28.01.2020
comment
Это выглядит как хороший дубликат, вы его проверили?   -  person Aaron    schedule 28.01.2020


Ответы (2)


Это проблема с активной кодовой страницей. В частности, 65001 является проблемой и популярна, поэтому я думаю, что это тот, который используется, но см. Ссылку позже для некоторых вариантов.

На окнах:

> java --version
java 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)

Проверьте активную кодовую страницу с помощью chcp. Если он установлен на 65001 (возможно, вы играли с этим хаком, чтобы символы utf-8 отображались в вашем терминале), проблема надежно воспроизводима.

> chcp 65001
Active code page: 65001
> jshell
|  Welcome to JShell -- Version 11.0.1
|  For an introduction type: /help intro

jshell>TypeAnything<backspace>Exception in thread "main" java.lang.NullPointerException: charsetName
        at java.base/java.lang.String.<init>(String.java:464)
        at ...

Решение

Выбирайте из https://docs.oracle.com/javase/6/docs/technotes/guides/intl/encoding.doc.html, но chcp 850 должно помочь.

> chcp 850 && jshell
Active code page: 850
|  Welcome to JShell -- Version 11.0.1
|  For an introduction type: /help intro

jshell> TypeAnything<backspace>

Специально для PowerShell

Идея та же (изменить кодировку консоли), но команды немного другие. Опять же идея состоит в том, чтобы изменить кодировку. Посмотрите на текущую кодовую страницу с [Console]::OutputEncoding.CodePage, мы хотим переключить ее на одну из списка, например 850.

> [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850)
> jshell
person SpencerPark    schedule 04.02.2020
comment
Я был почти уверен, что это проблемы с кодировкой, но ... Все еще не работает в моем случае для PowerShell :( И есть много мест для кодирования для pwsh. В любом случае я заплачу награду. - person lucasvc; 04.02.2020
comment
@lucasvc Я обновил команду power shell, поможет ли это в вашем случае? - person SpencerPark; 05.02.2020
comment
\@SpencerPark Отлично! Оно работает! Но тогда означает, что JShell работает только с кодировкой Latin-1, а не с UTF-8? Что за кодирование-кошмар... - person lucasvc; 07.02.2020

Я попытался воспроизвести проблему, используя zulu openjdk-11. и Jshell работали нормально.

person aswin prabhakar    schedule 04.02.2020