java.lang.ClassFormatError:类文件末尾的额外字节

Che*_*Pls 9 java exception

当我尝试运行这个程序时,我收到一个奇怪的错误.该类编译成多个.class文件,我上周编译它(编辑之前)就好了.但现在,我看到了这个:

Exception in thread "main" java.lang.ClassFormatError: Extra bytes at the end of class file blah/hooplah/fubar/nonsense/IndexId$Transaction
Run Code Online (Sandbox Code Playgroud)

从我看来,Java 6 build 1.5可以修复它,因为它允许类文件末尾的额外字节(我认为),但我宁愿使用build 1.6.

我正在Windows上进行编辑,然后将.java文件FTP到OpenVMS机器上,然后编译它们.在编译之后,我将.class文件移动到一个目录中,该目录是通过爆炸前一个jar文件然后重新jar.

关于这是如何发生或如何解决的任何明确的想法?

Bal*_*usC 8

根据VM Spec 4.9.1确实不允许这样做:

class不得截断该文件或在末尾添加额外的字节.

如果Java编译器和Java运行时使用不兼容,则会发生这种情况.验证两个版本并确保为正确的运行时版本进行编译.即编译的类可以与相同或更新的运行时版本一起使用,但并不总是与较旧的运行时版本一起使用.使用java -version和检查版本javac -version.

另一个常见原因是文件在不同计算机之间的文件传输(FTP)期间被破坏.此传输应以二进制模式而不是文本模式完成.

另一个可能的原因是硬件错误,例如损坏的硬盘/文件/内存.尝试重新编译或其他机器.


Che*_*Pls 3

通过从 .java 文件中删除所有换行符并正确重命名该文件解决了该问题(OpenVMS 默认为全部小写,除非被告知不要这样做)

可悲的是,我的失败是因为没有在每个之间进行测试,但至少它是有效的。

简而言之:

- 换行很糟糕并且正确命名文件(Java 标准而不是操作系统标准)