首页 文章

斯卡拉 . 日食 . SBT在模式匹配时崩溃,什么都不说 . SBT错误?

提问于
浏览
0

抱歉留言很长 - 希望,你会读到它 . 我开始在Scala上完成我的课程 . 它是FTP服务器 . 它使用模式匹配进行命令识别 . 我在Eclipse中编写代码 . 我想,SBT有一个bug,但我不知道该怎么说 .

描述:编译时间长 . 编译后,IDE中没有任何错误 . 但是“问题”面板中有下一行:

SBT构建器在编译项目时崩溃了 . 这是Scala编译器或SBT中的错误 . 检查Erorr日志以获取详细信息 . 错误消息是:ch.epfl.lamp.fjbg.JCode $ OffsetTooBigException:偏移量太大而不适合16位:38838 FTPDaemon未知Scala问题

但程序启动并运行 . 运行时的下一个错误:

线程“main”中的异常java.lang.ClassFormatError:java.security.SecureClassLoader中java.lang.ClassLoader.defineClass(ClassLoader.java:787)的java.lang.ClassLoader.defineClass1(本地方法)中的截断类文件 . java.net.URLClassLoader.access上的java.net.URLClassLoader.defineClass(URLClassLoader.java:447)中的defineClass(SecureClassLoader.java:142)java.net.URLClassLoader $ 1.run(URLClassLoader)中的$ 100(URLClassLoader.java:71) .java:361)java.net.URLClassLoader $ 1.run(URLClassLoader.java:355)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:354)at java .lang.ClassLoader.loadClass(ClassLoader.java:423)位于org.egslava的java.lang.ClassLoader.loadClass(ClassLoader.java:356)的sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308) . 位于org.egslava.ftp.Main.main(Main.scala)的org.egslava.ftp.Main $ .main(Main.scala:38)的ftp.ControlConnection . (ControlConnection.scala:14)

当我执行新的ControlConnection()时会显示此错误.start(); ControlConnection使用变量currentState(指向抽象类FtpState的指针) . 当前状态可以是DoLogin类或WaitForCommandsState类的实例 .

WaitForCommands包含下一个代码块:

message match{  
case owner.Noop() => "200 NOOP ok\r\n";     
case owner.User(_) => "530 Can't change from guest user\r\n";   
case owner.Pass(_) => "230 Already logged in\r\n";  
case owner.Pasv() => pasv() + "\r\n";   case owner.List() => list() + "\r\n";   
case "condition" => "error";    
case owner.Nlst() => nlst() + "\r\n";   
case owner.TypeCMD() => ""//"200 Switching to binary mode\r\n";
case "PWD" => "257 \"" + currentDirectory + "\"\r\n";   
case "SITE HELP" => "200-\r\n200\r\n";  
case owner.Cwd(path) => "250 Directory successfuly changed\r\n";
case "condition2" => "error2"   
case unrecognizedCommand => "500 Unrecognized command " + unrecognizedCommand + "\r\n"; 
}

如果我评论字符串(任何):case "condition" => "error";
或案例"condition2" => "error2"
错误将消失 .

它是什么?

1 回答

  • 2

    通过生成比JVM类允许的最大字节码更长的字节码,用于编译模式匹配的算法将在过大的case语句上失败 . 据我了解,这是在Scala 2.10中修复的 .

相关问题