Не удалось создать JLineReader (Scala REPL) - PullRequest
5 голосов
/ 15 июня 2011

Когда я запускаю REPL в 64-разрядной версии Windows 7 (на моем ноутбуке с Windows XP все работает нормально), я получаю следующее сообщение:

Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initial
ize class org.fusesource.jansi.internal.Kernel32
Falling back to SimpleReader.

Это означает, что история и автозавершение кода не работают.

Я погуглил проблему, но не могу найти решение.У меня нет sbt, Maven или ivy, поэтому я не думаю, что это как-то связано с этим.Мой% SCALA_HOME% настроен правильно.

В этой теме есть что-то о зависимости от Scala 2.8: http://www.scala -lang.org / node / 9855 , но я неНе могу понять, как решить эту проблему в моей системе.

Согласно предложениям в этой теме: http://www.scala -lang.org / node / 9795 Я обновил свои библиотеки MS C ++, но все ещеесть проблема.Я запустил код, предложенный в посте № 11, и получил следующее:

scala> println(System.getProperty("java.library.path"))

C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\
Windows;C:\Program Files\Common Files\Microsoft Shared\Windows Live;c:\Program F
iles (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Win
dows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files
(x86)\QuickTime\QTSystem\;C:\Program Files (x86)\ZipGenius 6\;C:\Program Files (
x86)\Java\jdk1.6.0_22\bin;C:\Program Files\SlikSvn\bin\;C:\Program Files\apache-
ant-1.8.2\bin;C:\Program Files\TortoiseSVN\bin;C:\cygwin\bin;C:\Program Files (x
86)\Notepad++;C:\Program Files (x86)\groovy-1.7.10\bin;C:\Program Files\scala2.9
\bin

scala> println(org.fusesource.jansi.internal.WindowsSupport.getConsoleMode)

java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.
internal.Kernel32
        at org.fusesource.jansi.internal.WindowsSupport.getConsoleMode(WindowsSu
pport.java:48)
        at .<init>(<console>:8)
        at .<clinit>(<console>)
        at .<init>(<console>:11)
        at .<clinit>(<console>)
        at $export(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.call(IMain.scala:592)

        at scala.tools.nsc.interpreter.IMain$Request$$anonfun$10.apply(IMain.sca
la:828)
        at scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:4
3)
        at scala.tools.nsc.io.package$$anon$2.run(package.scala:31)
        at java.lang.Thread.run(Unknown Source)

Любая помощь в получении этой работы приветствуется!

1 Ответ

4 голосов
/ 16 июня 2011

РЕДАКТИРОВАТЬ: Решение было набрать del %TEMP%\jansi.dll - см. Комментарий huynhjl ниже для причины.


Кажется, что REPL несовместим с 64-битной JRE.Я изменил свою переменную окружения JAVA_HOME в расширенных системных настройках, чтобы использовать 32-разрядную версию, то есть с C:\Program Files\Java\jre6 до C:\Program Files (x86)\Java\jdk1.6.0_22.

Затем мне пришлось исправить ошибку (то есть ВСЕ ЕЩЕ) вфайл scala.bat путем изменения строки 24 с

    if exist "%JAVA_HOME%\bin\java.exe" set _JAVACMD=%JAVA_HOME%\bin\java.exe

на

    if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"

, и теперь он работает нормально.

java из командной строки - умныйдостаточно для использования 64-битной среды выполнения независимо от ваших переменных Path или JAVA_HOME, но scala использует все, что вы укажете в JAVA_HOME (что, вероятно, на самом деле так и должно быть).Но 64-разрядная среда выполнения намного быстрее, чем 32-разрядная, поэтому я хотел бы использовать это.

В настоящий момент мне кажется, что мне нужно выбрать между полнофункциональным REPL и работой на64-битная JVM.(

...