如何修复java.lang.ClassFormatError:类文件截断错误?

如何修复java.lang.ClassFormatError:类文件截断错误?,java,macos,sublimetext2,Java,Macos,Sublimetext2,我试图在Mac上使用升华文本2,以便为我要上的一个类编写代码。我想测试一下,以确保我可以先用一个基本的程序来做这件事,但是当我试图运行它时,我遇到了一个错误。我将构建系统设置为JavaC,代码编译得很好,就在我尝试运行它时,我遇到了问题。以下是我的步骤: $ cd Documents/school/algorithms/assignments/ $ javac Hello.java $ java Hello Exception in thread "main" java.lang.ClassF

我试图在Mac上使用升华文本2,以便为我要上的一个类编写代码。我想测试一下,以确保我可以先用一个基本的程序来做这件事,但是当我试图运行它时,我遇到了一个错误。我将构建系统设置为JavaC,代码编译得很好,就在我尝试运行它时,我遇到了问题。以下是我的步骤:

$ cd Documents/school/algorithms/assignments/
$ javac Hello.java
$ java Hello

Exception in thread "main" java.lang.ClassFormatError: Truncated class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
我已经试着研究这意味着什么,但我做不到。这是我为
Hello.java

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
如果有人能帮我解决这个问题,我将不胜感激。如果您需要更多信息,请告诉我。

我可以看到,您的“Hello.java”文件没有任何问题。 但是您得到的错误
java.lang.ClassFormatError:被截断的类文件
是由于类文件(字节码)的问题造成的。 实际上,有两种类型的
ClassFormatError

  • 第一个是“不兼容的魔法值”,只有在修改
    .class
    文件中的字节码(添加或删除某些内容)时才会出现
  • 您得到的第二个“截断类文件”以及此错误背后的原因是
    .class
    文件不包含任何字节码

因此,我建议您检查
.class
文件,以确保其中包含一些代码。如果没有,请将代码保存到另一个目录,然后编译并运行代码。

我刚刚在Android Studio
4.1.1
中修复了相同的问题。错误是:

> Task :my_module:kaptGenerateStubsDebugKotlin FAILED
e: java.lang.ClassFormatError: Truncated class file
重新启动Android Studio,使缓存无效没有任何帮助。唯一帮助我的是升级Kotlin版本(我有
1.4.10
)以匹配Kotlin插件(我有
1.4.20

项目级
build.gradle

buildscript{
//我已经升级了Kotlin版本以匹配Kotlin插件。
ext.kotlin_version='1.4.20'
存储库{
谷歌()
jcenter()
}
依赖关系{
classpath'com.android.tools.build:gradle:4.1.1'
classpath“org.jetbrains.kotlin:kotlin gradle plugin:$kotlin_version”
}
}

这表示您的类文件已损坏。为什么?这不是Java的问题。也许你的磁盘已经满了?尝试:删除Hello.class,再次编译,再次运行。首先检查磁盘是否未满。