2012-06-14 26 views
8

Một câu hỏi nhanh về ngoại lệ java.lang.VerifyError. Giả sử tôi nhận được một lỗi mà trông như thế này:Giải thích thông báo ngoại lệ "Đối số không tương thích với chức năng"

Java call terminated by uncaught Java exception: java.lang.VerifyError:(class: com/.../MyClassName, method: <init> signature: (Ljava/io/Reader;)V) Incompatible argument to function 

Ông có thể giúp tôi với sự hiểu biết những gì các "init" và những gì "(Ljava/io/Reader;) V)" phụ tùng liên quan đến? Họ không giống như tên phương pháp hoặc chữ ký cho tôi, nhưng tôi không quá quen thuộc với java. Cảm ơn!

Trả lời

7

Lỗi này có nghĩa là một nơi nào đó trong mã của bạn, bạn đã cố gắng gọi một hàm tạo (phương thức <init>) chuyển vào tập hợp các đối số sai. Đối số được mong đợi là đối tượng Reader.

Điều này có thể có nghĩa là trước đó bạn đã biên soạn một tệp lớp, sau đó thay đổi định nghĩa lớp theo một cách nào đó mà không cần biên dịch lại tệp lớp. Do đó, mã của bạn cố gắng gọi một hàm không còn tồn tại nữa. Hãy thử biên dịch lại mã và xem có khắc phục được không.

Hy vọng điều này sẽ hữu ích!

+0

Cảm ơn! Vấn đề là, loại đối tượng được khởi tạo không có hai hàm tạo, một tham gia một chuỗi và một tham chiếu StreamReader làm tham số. Không có phiên bản nào khác của kiểu thiếu trình xây dựng có chuỗi. Đây là kỳ quái. Tôi phải tìm cách để bước qua mã này. – Zoomzoom

+0

Cuối cùng chúng tôi đã tìm ra rằng các lớp java được nạp bị hỏng và buộc phải tải lại tất cả các lớp. – Zoomzoom

3

Nếu bạn đang chạy ứng dụng của mình trên máy chủ ứng dụng, đó có thể là sự cố tải lớp.

Bạn đã biên soạn mã của mình dựa vào thư viện và khi bạn cố gắng chạy mã của mình, mã đó đang chạy với phiên bản khác (cũ hơn) của thư viện.

Thư viện cũ có thể không có phương thức hoặc hàm tạo đó.

+0

Cảm ơn. Tôi đồng ý rằng có thể liên quan đến phiên bản không phù hợp. – Zoomzoom

0

Chỉ để theo dõi nguyên nhân khác.

Luôn trên máy chủ ứng dụng (trong trường hợp của tôi là WildFly 10), bạn có thể đang tải cùng một thư viện trên một mô-đun và trên lib EAR. Nếu thư viện này chứa một giao diện cần được thực hiện bởi mô-đun, điều này có thể gây ra xung đột vì cùng một lớp/giao diện được nạp bởi hai trình nạp lớp khác nhau được coi là hai loại khác nhau.

Các vấn đề liên quan