ClassFormatError: balise de constante inconnue dans la classe XY
J'ai un morceau de code dans lequel j'essaie de charger une classe au cours de l'exécution. Le code n'est pas tous les selfwritten alors j'ai quelques problèmes de compréhension de l'erreur qui a toujours appers après la compilation.
Voici le code:
private Class findClass(String s)
throws ClassNotFoundException
{
URL url = getResource("AP.class");
if(url == null)
{
throw new ClassNotFoundException(s);
}
inputstream = null;
Class classToRead;
try
{
inputstream = url.openStream();
byte abyte0[] = readClass(inputstream);
classToRead= defineClass(s, abyte0, 0, abyte0.length);
}
catch(IOException ioexception)
{
throw new ClassNotFoundException(s);
}
if(inputstream != null)
{
try
{
inputstream.close();
}
catch(Exception exception1) { }
}
return classToRead;
}
L'erreur s'affiche à l'defineClass méthode.
Erreur stacktrace:
Exception in thread "main" java.lang.ClassFormatError: Unknown constant tag 63 in class file AP
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at c.findClass(c.java:100)
at c.loadClass(c.java:56)
at java.lang.ClassLoader.loadClass(Unknown Source)
at c.a(c.java:20)
at mainOpenClass.main(lol.java:13)
Mes questions maintenant:
Est peut-être quelque chose de mal avec le code?
Est-il possible que l'AP.class est-il endommagé?
Que signifie l'erreur signifie vraiment?
J'espère que quelqu'un peut m'aider avec mon problème parce que la recherche de l'internet n'a pas vraiment aider dans ce cas.
source d'informationauteur Mister004
Vous devez vous connecter pour publier un commentaire.
Le code que vous avez écrit vous-même est très bien. Le problème est que
AP.class
est endommagé fichier de classe, d'où leClassFormatError
.L'erreur elle-même les moyens qu'il a échoué à décoder correctement les constante piscineune section de la classe de la structure du fichier qui est un peu comme une table des symboles. Voir §4.4 de la Machine Virtuelle Java Specification:
Donc, l'erreur elle-même est vous dire que la classe est une constante de la piscine d'entrée de la table avec une balise incorrecte, à savoir
63
. Vérifier avec le Tableau 4.3 mentionné ci-dessus, en effet, cela ne correspond pas à tout documentés genre decp_info
entrée.Essayer de re-télécharger
AP.class
. Compte tenu de l'obscur (les nomsAP
ainsi quec
à partir de la trace de la pile), je vais supposer que vous essayez d'utiliser certains d'obfuscation de code. Vérifier non seulement que le code que vous essayez de faire face à n'est pas encore protégé par une sorte de chiffrement, mais aussi que tout le prétraitement vous faire (par exemple, deobfuscation) ne pas endommager les données.Des réponses à vos questions:
Pas
Oui
À Partir De Java Doc Levée lorsque la Machine Virtuelle Java les tentatives de
lire un fichier de classe et détermine que le fichier est incorrect ou
sinon, ne peut être interprété comme un fichier de classe.