0

長いメッセージで申し訳ありませんが、読んでいただければ幸いです。私は Scala でコースの仕事を始めました。FTPサーバーです。コマンド認識にパターンマッチングを利用しています。私はEclipseでコードを書いています。SBTにはバグがあると思いますが、それについてどこに言えばいいのかわかりません。

説明: 長いコンパイル時間。コンパイル後、IDE にエラーはありません。しかし、「問題」パネルには次の行があります。

プロジェクトのコンパイル中に SBT ビルダーがクラッシュしました。これは、Scala コンパイラまたは SBT のバグです。詳細については、エラー ログを確認してください。エラー メッセージは次のとおりです: ch.epfl.lamp.fjbg.JCode$OffsetTooBigException: オフセットが大きすぎて 16 ビットに収まりません: 38838 FTPDaemon 不明な Scala の問題

しかし、プログラムは起動して動作します。実行時の次のエラー:

スレッド「メイン」で例外 java.lang.ClassFormatError: java.lang.ClassLoader.defineClass1(Native Method) で切り捨てられたクラス ファイル java.lang.ClassLoader.defineClass(ClassLoader.java:787) で java.security.SecureClassLoader.defineClass (SecureClassLoader.java:142) で java.net.URLClassLoader.defineClass(URLClassLoader.java:447) で java.net.URLClassLoader.access$100(URLClassLoader.java:71) で java.net.URLClassLoader$1.run(URLClassLoader. java:361) で java.net.URLClassLoader$1.run(URLClassLoader.java:355) で java.security.AccessController.doPrivileged(Native Method) で java.net.URLClassLoader.findClass(URLClassLoader.java:354) で Java. lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.egslava.ftp.ControlConnection.(ControlConnection.scala:14) at org.egslava.ftp.Main$.main(Main.scala:38) at org.egslava.ftp.Main .main(メイン.スカラ)

このエラーは、 new 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";
または case "condition2" => "error2"
エラーが消えます。

それは何ですか?

4

1 に答える 1

2

パターン マッチングのコンパイルのアルゴリズムは、case ステートメントが大きすぎると失敗し、JVM クラスで許可されている最大長よりも長いバイトコードが生成されます。私が理解しているように、これは Scala 2.10 で修正される予定です。

于 2012-06-08T10:57:39.027 に答える