


Pourquoi l'erreur Java.lang.VerifyError se produit-elle en Java et comment résoudre ce problème ?
Java.lang.VerifyError 是由 JVM(Java 虚拟机)引发的运行时错误。在运行时,验证过程会检查加载的有效性。 class 文件,如果 .class 文件违反任何约束,那么 JVM 将给出 Java.lang.VerifyError 错误。 Java 1.0 版本及更高版本中存在以下错误。
java.lang.LinkageError 扩展了 Java.lang.VerifyError,它指的是程序的链接过程出现问题时。
Java.lang.VerifyError在输出中的样子将会是:
Exception in thread "main" java.lang.VerifyError: (class: com/example/Way2Class, method: myMethod signature: ()V) Incompatible argument to function at com.example.MyClass.main(MyClass.java:10)
此输出包含导致错误的类的名称 (Way2class)、类路径 (com/example/Way2Class)、错误行 (10)、方法名称 (myMethod) 和错误消息(线程“main”java 中的异常) .lang.VerifyError)
出现此错误的原因有多种,如下所示:
版本不匹配:需要注意的是,如果类文件是使用与执行代码所使用的Java编译器版本不同的版本进行编译的话,可能会导致VerifyError。
示例
public class VerifyErrorVersionExample { public static void main(String[] args) { System.out.println("Hello, program!"); } }
在该特定程序使用 Java 9 编译并在早期版本(例如 Java 8)上运行的情况下,输出将显示后续错误解释:
输出
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack Exception Details: Location: VerifyErrorVersionExample.main([Ljava/lang/String;)V @2: invokestatic Reason: Type 'java/lang/invoke/StringConcatFactory' (current frame, stack[0]) is not assignable to 'java/lang/invoke/MethodHandle' Current Frame: bci: @2 flags: { } locals: { '[Ljava/lang/String;' } stack: { 'java/lang/invoke/StringConcatFactory' } Bytecode: 0x0000000: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 0x0000003: ldc #3 // String Hello, world! 0x0000005: invokestatic #4 // Method java/lang/invoke/StringConcatFactory.makeConcatWithConstants:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/MethodHandle; 0x000000a: ldc #5 // String 0x000000c: iconst_1 0x000000d: anewarray #6 // class java/lang/Object 0x0000010: dup 0x0000011: iconst_0 0x0000012: ldc #7 // String !!! 0x0000014: aastore 0x0000015: invokevirtual #8 // Method java/lang/invoke/MethodHandle.invokeExact:([Ljava/lang/Object;)Ljava/lang/Object; 0x000001a: checkcast #9 // class java/lang/String 0x000001d: invokevirtual #10 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 0x0000020: return
字节码损坏:如果对类文件的字节码进行修改或损坏,可能会出现错误。
示例
public class VerifyErrorBytecodeExample { public static void main(String[] args) { int a = 10; int b = 20; int c = a + b; System.out.println("The sum of " + a + " and " + b + " is " + c); } }
输出
Exception in thread "main" java.lang.VerifyError: (class: VerifyErrorBytecodeExample, method: main signature: ([Ljava/lang/String;)V) Illegal target of jump or branch at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.getDeclaredMethod(Class.java:2128) at java.io.ObjectStreamClass.getPrivateMethod(ObjectStreamClass.java:1743) at java.io.ObjectStreamClass.access$1700(ObjectStreamClass.java:72) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:513) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:492) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:492) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:389) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1134) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at VerifyErrorBytecodeExample.main(VerifyErrorBytecodeExample.java:6)
类文件不一致:如果类文件违反了Java虚拟机规范所强制的某些约束条件。
示例
public class VerifyErrorExample { public static void main(String[] args) { Animal animal = new Cat(); animal.speak(); } } interface Animal { void speak(); } class Dog implements Animal { public void speak() { System.out.println("Woof!"); } } class Cat extends Dog { public void speak() { System.out.println("Meow!"); } }
这个程序定义了一个‘Animal’接口和两个实现它的具体类:Dog和Cat。Cat继承了Dog并重写了它的speak方法。在主方法中,我们创建了一个Cat实例并调用了它的speak方法。
假设我们选择从当前类路径中取出 Dog 类,然后重新编译并运行我们的程序,将会显示 java.lang。验证错误。此错误将显示如下错误消息:
输出
Exception in thread "main" java.lang.VerifyError: Bad type on operand stack Exception Details: Location: VerifyErrorExample.main([Ljava/lang/String;)V @2: invokevirtual Reason: Type 'Cat' (current frame, stack[0]) is not assignable to 'Dog' Current Frame: bci: @2 flags: { } locals: { '[Ljava/lang/String;' } stack: { 'Cat' } Bytecode: 0000000: new #2 // class Cat 0000003: dup 0000004: invokespecial #3 // Method Cat."":()V 0000007: astore_1 0000008: aload_1 0000009: invokevirtual #4 // Method Animal.speak:()V 000000c: return
结论
总之,遇到java.lang.VerifyError错误可能是由于各种原因引起的,包括字节码波动、安全计算实践中的限制,以及代码库中包含的Java组件的不一致互相依赖版本等等。在运行时,确保所有使用的库与您的系统和其他依赖库兼容是避免此问题的一种非常重要的方式。遵守这些要求将确保遵守Java的字节码规定,避免出现问题的编码实践,例如不符合安全协议或提交具有类文件不一致性的代码,这可能导致后续出现错误。每当java.lang.VerifyError出现时,必须仔细检查相关的错误消息以及您可以获取的堆栈跟踪,以确定正在发生的确切问题并采取必要的纠正措施。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Si vous rencontrez un message d'erreur lors de l'utilisation de votre imprimante, tel que l'opération n'a pas pu être terminée (erreur 0x00000771), cela peut être dû au fait que l'imprimante a été déconnectée. Dans ce cas, vous pouvez résoudre le problème grâce aux méthodes suivantes. Dans cet article, nous verrons comment résoudre ce problème sur un PC Windows 11/10. Le message d'erreur complet indique : L'opération n'a pas pu être terminée (erreur 0x0000771). L'imprimante spécifiée a été supprimée. Correction de l'erreur d'imprimante 0x00000771 sur un PC Windows Pour corriger l'erreur d'imprimante, l'opération n'a pas pu être terminée (erreur 0x0000771), l'imprimante spécifiée a été supprimée sur un PC Windows 11/10, suivez cette solution : Redémarrez le spool d'impression

Windows Sandbox se termine-t-il avec Windows Sandbox impossible à démarrer, erreur 0x80070005, message Accès refusé ? Certains utilisateurs ont signalé que Windows Sandbox ne pouvait pas être ouvert. Si vous rencontrez également cette erreur, vous pouvez suivre ce guide pour la corriger. Windows Sandbox ne parvient pas à démarrer - Accès refusé Si Windows Sandbox se termine avec Windows Sandbox Impossible de démarrer, erreur 0x80070005, message Accès refusé, assurez-vous que vous êtes connecté en tant qu'administrateur. Ce type d'erreur est généralement dû à des autorisations insuffisantes. Essayez donc de vous connecter en tant qu'administrateur et voyez si cela résout le problème. Si le problème persiste, vous pouvez essayer les solutions suivantes : Exécutez le Wi-Fi en tant qu'administrateur

Décryptage du code d'état HTTP 460 : pourquoi cette erreur se produit-elle ? Introduction : Lors de l'utilisation quotidienne du réseau, nous rencontrons souvent diverses invites d'erreur, notamment des codes d'état HTTP. Ces codes d'état sont un mécanisme défini par le protocole HTTP pour indiquer le traitement d'une requête. Parmi ces codes d’état, il existe un code d’erreur relativement rare, à savoir le 460. Cet article examinera ce code d'erreur et expliquera pourquoi cette erreur se produit. Définition du code d'état HTTP 460 : Tout d'abord, nous devons comprendre les bases du code d'état HTTP

Table des matières Solution 1 Solution 21. Supprimez les fichiers temporaires de Windows Update 2. Réparez les fichiers système endommagés 3. Afficher et modifier les entrées de registre 4. Éteignez la carte réseau IPv6 5. Exécutez l'outil WindowsUpdateTroubleshooter pour réparer 6. Éteignez le pare-feu et autres logiciels antivirus associés. 7. Fermez le service WidowsUpdate. Solution 3 Solution 4 Une erreur « 0x8024401c » se produit lors de la mise à jour de Windows sur les ordinateurs Huawei Symptôme Problème Cause Solution Toujours pas résolu ? Récemment, le serveur Web a dû être mis à jour en raison de vulnérabilités du système. Après la connexion au serveur, la mise à jour affiche le code d'erreur 0x8024401c.

Si vous rencontrez le code d'erreur 0x80070003 lors de l'utilisation d'Hyper-V pour créer ou démarrer une machine virtuelle, cela peut être dû à des problèmes d'autorisation, à une corruption de fichier ou à des erreurs de configuration. Les solutions incluent la vérification des autorisations des fichiers, la réparation des fichiers endommagés, la garantie d'une configuration correcte, etc. Ce problème peut être résolu en excluant les différentes possibilités une à une. L'intégralité du message d'erreur ressemble à ceci : Le serveur a rencontré une erreur lors de la création de [nom de la machine virtuelle]. Impossible de créer une nouvelle machine virtuelle. Impossible d'accéder au magasin de configuration : le système ne trouve pas le chemin spécifié. (0x80070003). Certaines causes possibles de cette erreur incluent : Le fichier de la machine virtuelle est corrompu. Cela peut se produire en raison d’attaques de logiciels malveillants, de virus ou de logiciels publicitaires. Même si la probabilité que cela se produise soit faible, vous ne pouvez pas complètement

Si vous rencontrez l'erreur Kadena-Keesler en jouant à Call of Duty : Vanguard, cet article peut vous être utile. Selon les retours de certains joueurs, le jeu présente ce problème sur PC Windows, Xbox, PlayStation et autres plateformes. Une fois déclenché, le message d'erreur suivant peut s'afficher : Échec de la connexion Aucune connexion réseau n'a échoué. Vous devez disposer d'une connexion Internet active pour jouer en ligne ou sur un réseau local. [Raison : Kadena-Keesler] Vous pouvez également recevoir le message d'erreur suivant : Échec de la connexion Impossible d'accéder aux services en ligne. [Raison : Kadena-Keesler] Une autre instance de cette erreur sur Xbox est la suivante : Vous devez disposer d'une connexion réseau active.

Titre : Analyse de l'erreur Oracle 3114 : causes et solutions Lorsque vous utilisez la base de données Oracle, vous rencontrez souvent divers codes d'erreur, parmi lesquels l'erreur 3114 est relativement courante. Cette erreur implique généralement des problèmes de liaison à la base de données, qui peuvent provoquer des exceptions lors de l'accès à la base de données. Cet article interprétera l'erreur Oracle 3114, discutera de ses causes et donnera des méthodes spécifiques pour résoudre l'erreur et des exemples de code associés. 1. Définition de l'erreur 3114 Erreur Oracle 3114 réussite

L'erreur d'affichage est un problème qui peut survenir dans l'application Xiangxiang Fuzhai. Certains utilisateurs ne savent pas pourquoi l'application Xiangxiang Fuzhai affiche des erreurs. Cela peut être dû à des problèmes de connexion réseau, à un trop grand nombre de programmes en arrière-plan, à des informations d'enregistrement incorrectes, etc. Ceci est l'introduction de l'éditeur sur la façon de résoudre les erreurs d'affichage des applications pour les utilisateurs. Les utilisateurs intéressés devraient venir y jeter un œil ! Pourquoi l'application Xiangxiang Fuzhai affiche-t-elle une réponse d'erreur : problème de connexion réseau, trop de programmes en arrière-plan, informations d'enregistrement incorrectes, etc. Détails : 1. [Problème de réseau] Solution : Vérifiez l'état du réseau de connexion de l'appareil, reconnectez-vous ou choisissez une autre connexion réseau pour utiliser. 2. [Trop de programmes en arrière-plan] Solution : fermez les autres programmes en cours d'exécution et libérez le système, ce qui peut accélérer l'exécution du logiciel. 3. [Informations d'enregistrement incorrectes
