Tôi có một chức năng Java mà trả về một trường hợp singleton của một ClassJNI cuộc gọi đến chức năng Java trả lại một kết quả Object trong NoSuchMethodError
public static synchronized MyClass getInstance() throws MyClassException{
if (instance == NULL){
// create
}
return instance;
}
Tôi muốn gọi này thông qua C++, nhưng khi tôi làm, nó sẽ trả về một NoSuchMethodError.
cls = jenv->FindClass("MyClass");
if (cls == NULL)
{
//error handling
}
mid = jenv->GetStaticMethodID(cls, "getInstance", "()LMyClass");
if (mid == NULL)
{
//error handling
}
Khi tôi chạy:
javap -s -p on MyClass, I get the signature:
public static synchronized MyClass getInstance() throws MyClassException;
Signature:()LMyClass;
Nếu tôi thay đổi chức năng chữ ký để làm mất hiệu lực trong lớp Java, cuộc gọi GetStaticMethodID hoạt động như mong đợi.
Tôi có cần thiết lập công việc để mong đợi giá trị trả lại từ cuộc gọi không?
Điều này có thể thực hiện mà không cần gọi trước GetStaticMethodID không?
Cuộc gọi trả lại lỗi ở đâu? –
Khi tôi chạy ứng dụng C++, tôi nhận được: Ngoại lệ trong chủ đề "chính" java.lang.NoSuchMethodError: getInstance – donalmg
Tôi tự hỏi liệu bạn có cần chỉ định đường dẫn đầy đủ đến "MyClass" trong lệnh gọi GetStaticMethodId hay không. Ví dụ: jenv-> GetStaticMethodID (cls, "getInstance", "() Lcom/work/MyClass;"); Tùy thuộc vào nơi mã CPP sống liên quan đến mã Java? Chỉ là một ý nghĩ. – eternaln00b