未能创建JLineReader(Scala REPL)

未能创建JLineReader(Scala REPL),scala,read-eval-print-loop,Scala,Read Eval Print Loop,当我在64位Windows 7上启动REPL(它在我的Windows XP笔记本电脑上正常工作)时,我收到以下消息: Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initial ize class org.fusesource.jansi.internal.Kernel32 Falling back to SimpleReader. 这意味着历史记录和代码完成不起作用 我用谷歌搜索了这个问题,

当我在64位Windows 7上启动REPL(它在我的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\u HOME%设置正确

在这个线程中有一些关于Scala 2.8的依赖性:,但是我不知道如何在我的系统上解决这个问题

按照这个线程的建议:我更新了我的MS C++库,但是仍然有问题。我运行了post#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)
scala>println(System.getProperty(“java.library.path”))
C:\ProgramFiles\Java\jre6\bin;。;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\
窗户;C:\Program Files\Common Files\Microsoft Shared\Windows Live;c:\程序F
iles(x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32;C:\Windows;C:\Win
dows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\程序文件
(x86)\QuickTime\QTSystem\;C:\ProgramFiles(x86)\ZipGenius 6\;C:\程序文件(
x86)\Java\jdk1.6.0\u 22\bin;C:\ProgramFiles\SlikSvn\bin\;C:\ProgramFiles\apache-
ant-1.8.2\bin;C:\Program Files\TortoiseSVN\bin;C:\cygwin\bin;C:\程序文件(x)
86)\Notepad++;C:\ProgramFiles(x86)\groovy-1.7.10\bin;C:\Program Files\scala2.9
\垃圾箱
scala>println(org.fusesource.jansi.internal.WindowsSupport.getConsoleMode)
java.lang.NoClassDefFoundError:无法初始化类org.fusesource.jansi。
内核32
位于org.fusesource.jansi.internal.WindowsSupport.getConsoleMode(WindowsSu
pport.java:48)
在。(:8)
在
在。(:11)
在
美元出口()
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
在scala.tools.nsc.explorer.IMain$ReadEvalPrint.call中(IMain.scala:592)
在scala.tools.nsc.explorer.IMain$Request$$anonfun$10.apply(IMain.sca)中
洛杉矶:828)
在scala.tools.nsc.interpreter.Line$$anonfun$1.apply$mcV$sp(Line.scala:4
3)
位于scala.tools.nsc.io.package$$anon$2.run(package.scala:31)
位于java.lang.Thread.run(未知源)

任何有助于使这项工作感谢

编辑:解决方案是键入
del%TEMP%\jansi.dll
——有关原因,请参见下面huynhjl的评论


似乎REPL与64位JRE不兼容。我在高级系统设置中将我的
JAVA\u HOME
环境变量更改为使用32位版本,即从
C:\Program Files\JAVA\jre6
更改为
C:\Program Files(x86)\JAVA\jdk1.6.0\u 22

然后,我必须通过将第24行从

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

现在一切正常

命令行中的
java
足够智能,可以使用64位运行时,而不管您的路径或java\u HOME变量是什么,但是
scala
使用您在java\u HOME中指定的任何内容(实际上可能是它应该使用的方式)。但是64位运行时比32位运行时快得多,所以我想使用它


目前看来,我必须在全功能REPL和在64位JVM上运行之间进行选择(

@Daniel Izpack安装程序的正常方式mmmm。尝试通过Typesafe的安装程序进行安装:它似乎比Izpack更聪明。我有一个理论,但我不会在我的win64安装前验证它。有两个
jansi.dll
捆绑在
jline.jar
中,一个用于32位,另一个用于64位。正在挑选的是cho基于
sun.arch.data.model
系统属性(32或64)的值的sen。一旦解包,dll不会根据时间戳刷新。因此我猜您首先运行了解包32位dll的32位版本。启动64位JVM时,
jansi.dll
是不兼容的。因此,请尝试
del%TEMP%\jansi.dll
然后在64位上启动scala,看看是否有效。我已提交以下内容问题跟踪程序中的ng问题:
    if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"