2010-11-08 54 views
54

Tôi chỉ muốn tạo một đối tượng của lớp, nhưng có lỗi này khi gỡ lỗi. Ai có thể cho tôi biết vấn đề là gì? Vị trí của mã này nằm trong lớp dịch vụ Spring (2.5).com.sun.jdi.InvocationException xảy ra phương thức gọi

Có một vấn đề tương tự: OJB Reference Descriptor 1:0 relationship? Should I set auto-retrieve to false?

Cảm ơn rất nhiều ~

+3

Thật khó để đoán được vấn đề của bạn là gì nếu không có bất kỳ mã nguồn hoặc theo dõi ngăn xếp nào. –

+8

Tôi figured nó ra, toString() phương pháp của lớp có thể ném NullPointerException nếu gọi, khi tôi sửa nó, lỗi biến mất, nhưng tôi không konwn làm thế nào điều này happend? – xyy

+3

Công việc xyz tuyệt vời. Bạn có thể tự mình đăng câu trả lời cho câu hỏi và sau đó chấp nhận câu trả lời đó để chúng tôi có thể đóng câu hỏi này không? Ngoài ra, bạn cần chấp nhận câu trả lời cho các câu hỏi trước nếu chúng khắc phục được sự cố của bạn. – Zecas

Trả lời

74

Nguyên nhân sâu xa là khi gỡ lỗi giao diện java debug sẽ gọi toString() của lớp học của bạn để hiển thị các thông tin lớp trong hộp bật lên, vì vậy nếu phương thức toString không được xác định chính xác, điều này có thể xảy ra.

+0

cảm ơn, nó đã hoạt động –

27

Tôi cũng có ngoại lệ tương tự khi gỡ lỗi trong Eclipse. Khi tôi kết nối một đối tượng, hộp bật lên hiển thị thông báo com.sun.jdi.InvocationException. Nguyên nhân gốc rễ của tôi không phải là phương pháp toString() của lớp học của tôi, mà là phương pháp hashCode(). Nó đã gây ra một NullPointerException, khiến cho com.sun.jdi.InvocationException xuất hiện trong khi gỡ lỗi. Một khi tôi đã chăm sóc con trỏ null, mọi thứ đã hoạt động như mong đợi.

2

vì vậy tôi có cùng một vấn đề ở đây. Phát hiện ra rằng trường hợp tên miền của tôi đã được tách ra khỏi phiên ngủ đông. Tôi đã sử dụng isAttached() để kiểm tra và đính kèm miền bằng cách sử dụng d.attach()

1

Vô hiệu hóa nút 'Hiển thị cấu trúc lôgic' ở góc trên bên phải của cửa sổ biến trong trình gỡ lỗi eclipse đã giải quyết nó trong trường hợp của tôi.

4

Đối với tôi cùng một ngoại lệ được ném khi toString được định nghĩa như vậy:

@Override 
public String toString() { 
    return "ListElem [next=" + next + ", data=" + data + "]"; 
} 

đâu ListElem là một yếu tố danh sách liên kết và tôi đã tạo ra một ListElem như vậy:

private ListElem<Integer> cyclicLinkedList = new ListElem<>(3); 
ListElem<Integer> cyclicObj = new ListElem<>(4); 
... 

cyclicLinkedList.setNext(new ListElem<Integer>(2)).setNext(cyclicObj) 
    .setNext(new ListElem<Integer>(6)).setNext(new ListElem<Integer>(2)).setNext(cyclicObj); 

này một cách hiệu quả gây ra một danh sách liên kết tuần hoàn không thể in được. Cảm ơn con trỏ.

10

Vâng, có thể là do một số điều được đề cập bởi những người khác ở trên. Trong trường hợp của tôi vấn đề là như nhau nhưng lý do là một cái gì đó khác.

Trong một lớp (A), tôi có một số đối tượng và một đối tượng là một lớp khác (B) với một số đối tượng khác. Trong suốt quá trình, một trong những đối tượng (String) từ lớp B có null, và sau đó tôi đã cố gắng truy cập đối tượng đó thông qua lớp cha (A).

Do đó, bảng điều khiển sẽ ném ngoại lệ điểm rỗng nhưng trình gỡ lỗi nhật thực sẽ hiển thị lỗi được đề cập ở trên.

Tôi hy vọng bạn có thể làm việc còn lại.

+0

điều này hữu ích +1 – mattymanme

1

Có thể có hai lý do một yếu tố không tồn tại:

  1. Bad xpath (// * [@ id'forgotQuote])
  2. xpath đúng nhưng không có yếu tố (// * [chứa (văn bản(), 'Văn bản này không có trong trang')])

Bạn sẽ nhận được com.sun.jdi.InvocationException trong cả hai trường hợp khi bạn đang chạy Debug và bạn di chuột qua tham chiếu đến WeBElement (điều này với Selenium và Java) ???

Chúng tôi sử dụng sau, nhưng không thể phân biệt nếu nó trả về false do xpath xấu hoặc yếu tố không tồn tại (cú pháp xpath hợp lệ):

public static boolean isElementDisplayed(WebElement element) { 
    boolean isDisplayed = false; 

    try { 
     isDisplayed = element.isDisplayed(); 
    } catch (NoSuchElementException e) { 
     ;// No Worries 
    } 
    return isDisplayed; 
} 
0

Loại bỏ hashCode()equals() giải quyết vấn đề của tôi. Trong trường hợp của tôi, tôi đã sử dụng mã băm commons-lang của Apache và bằng các trình xây dựng để tạo các lớp không tĩnh theo cách thủ công, do đó trình biên dịch không ném bất kỳ ngoại lệ nào. Nhưng tại thời gian chạy nó gây ra ngoại lệ invocation.

2

Tôi đã gặp vấn đề tương tự một lần. Trong trường hợp của tôi toString() phương pháp đã được tạo ra. Để được chính xác một biến cuối cùng tĩnh đã được bao gồm trong phương thức toString khi một nhà phát triển tạo nhóm của tôi được giao nhiệm vụ làm sạch mã và thêm các phương thức toString(), hashCode() và equals() vào các đối tượng miền khi nào có thể. nhưng trong các lớp học vì nhìn vào nó, ông bao gồm biến tĩnh cuối cùng gây ra các "com.sun.jdi.InvocationException" ngoại lệ này đã được nhìn thấy trên gỡ lỗi chỉ khi tôi di chuột qua đối tượng có ngoại lệ.

0

Trong trường hợp của tôi, đó là do tham chiếu đối tượng bị lỗi thời. Tôi đã tự động hóa ứng dụng bằng cách sử dụng selenium webdriver, vì vậy tôi gõ một cái gì đó vào một hộp văn bản và sau đó nó điều hướng đến một trang khác, vì vậy trong khi tôi trở lại trang trước, đối tượng đó bị cũ. Vì vậy, đây là gây ra ngoại lệ, tôi xử lý nó bằng một lần nữa initialising các yếu tố - PageFactory.initElements (trình điều khiển, Test.class;

1

Đây là trường hợp của tôi

Tôi đã có một BO lớp Sinh viên mà đã có đến nhiều-một lập bản đồ khác lớp BO lớp (lớp mà ông đã nghiên cứu).

Tôi muốn lưu dữ liệu vào một bảng khác, có phím ngoài của cả hai Sinh viênLớp học. Tại một số ví dụ thực hiện, tôi đã đưa một danh sách của Học sinh dưới một số điều kiện, và mỗi Student sẽ có một tham chiếu của Lớp lớp.

Mẫu mã: -

Iterator<Student> itr = studentId.iterator(); 
while (itr.hasNext()) 
{ 
    Student student = (Student) itr.next(); 
    MarksCardSiNoGen bo = new MarksCardSiNoGen(); 

    bo.setStudentId(student); 

    Classes classBo = student.getClasses(); 

    bo.setClassId(classBo); 
} 

Ở đây bạn có thể thấy rằng, tôi đang thiết cả StudentLớp tham chiếu đến BO Tôi muốn lưu. Nhưng trong khi gỡ lỗi khi tôi kiểm tra student.getClasses() nó đã được hiển thị ngoại lệ này (com.sun.jdi.InvocationException).

Vấn đề tôi thấy được rằng, sau khi lấy danh sách Student sử dụng HQL truy vấn, tôi đã đỏ bừngđóng các phiên.Khi tôi xóa câu hỏi session.close();, sự cố đã được giải quyết.

Phiên đã bị đóng khi cuối cùng tôi đã lưu tất cả dữ liệu vào bảng (MarksCardSiNoGen).

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

0

Tôi có ngoại lệ tương tự trong Eclipse. Điều này là do lỗi java.lang.StackOverflowError. Tôi đã overriden toString() phương pháp trong lớp trẻ em, có JoinColumn, được trả về chuỗi bằng cách sử dụng đối tượng của parentclass, dẫn đến phụ thuộc vòng tròn. Hãy thử xóa đối tượng đó khỏi toString() và nó sẽ hoạt động.

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