2016-09-10 39 views
2

我想在我的Mac上使用Sublime Text 2來編寫我正在學習的課程的代碼。我想測試一下,以確保我可以先用一個基本程序做到這一點,但是當我嘗試運行它時,會出現一個錯誤。我將構建系統設置爲JavaC,並且代碼編譯正常,只是在我嘗試運行它時遇到問題。這裏是我的步驟:如何解決java.lang.ClassFormatError:截斷的類文件錯誤?

$ 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!"); 
    } 
} 

代碼如果有人能幫助我這個問題,將不勝感激。讓我知道你是否需要任何信息。

+0

這意味着您的類文件已損壞。爲什麼?這不是Java問題。也許你的磁盤已滿?嘗試:刪除Hello.class,再次編譯,再次運行。首先檢查您的磁盤未滿。 –

回答

2

您可以看到「Hello.java」文件沒有任何問題。 但是你得到的錯誤java.lang.ClassFormatError: Truncated class file是由於你的類文件(字節碼)的問題。 其實,有兩件式的ClassFormatError

  • 第一個是「不兼容的魔法值」只發生在修改字節碼(添加的東西,刪除的東西)在.class文件
  • 第二一個「截斷的類文件」,你會得到這個錯誤的原因是.class文件不包含任何字節碼。

因此,我會建議您檢查您的.class文件,以確保它包含一些代碼。如果沒有,請將您的代碼保存到另一個目錄,然後編譯並運行您的代碼。