簡體   English   中英

嘗試運行 Java jar 文件時出現“ClassFormatError: Incompatible magic value”

[英]“ClassFormatError: Incompatible magic value” when trying to run Java jar file

我輸入了“java -jar ShowTime.jar”,得到了這個錯誤信息:

Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1347093252 in class file ShowTime
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
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:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

我應該如何解決這個問題? PS我有一個mac。

一個 Java class 應該以魔法(十六進制)值0xCAFEBABE (很好)。 您的值1347093252是十六進制的0x504B0304 ,這恰好是 ZIP 文件的神奇值(ASCII 中的前 2 個字節是Phil Katz的 PK,ZIP 格式的創建者)。 jar 也是一個 zipfile 順便說一句,所以你的 jar 可能已經損壞了。 嘗試重建整個項目。

這通常意味着您為 java 的更新版本編譯了 jar,而不是運行它。 查看是否使用相同版本的java編譯運行。 如果這不能解決問題,請提供更多信息,例如編譯器命令和java -version的 output 。

這意味着您的應用程序正在使用 jar 文件,該文件在其他系統中以特定格式編譯。 現在,當您嘗試在其他系統中使用該項目時,其他系統無法解碼 jar,因為每個系統都生成了一個特定的密鑰來捆綁該項目。

遠程調試 id 是查找 jar 格式不正確的問題的最佳方法。 在注釋提示符下運行命令以進行遠程調試

java -agentlib:jdwp=transport=dt_socket,server=y,address=8001,suspend=n (運行jar的命令和參數)

您需要的是,找到 jar 文件並用另一個 jar 替換(可能是新下載的,或者如果您的隊友有 jar。使用它。)

我得到的錯誤是因為我的項目方式依賴於另一個項目 ABC,而 ABC 使用的是通用 jar。 但是 ABC 項目與魔法鑰匙捆綁在一起。 我已經用下載的 jar 替換了 ABC 使用的 jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM