Có rất nhiều hướng dẫn để thực hiện chính xác những gì bạn muốn làm. Ví dụ: hãy xem: http://www.javamex.com/tutorials/jni/getting_started.shtml
Ngoài ra còn có nhiều cảnh báo sử dụng JNI. Gần đây tôi đã bắt đầu làm việc với nó (chỉ để cho vui, thực sự), và nó có xu hướng vui hơn rất nhiều so với tôi đã dự đoán trước.
Trước hết, bạn phải đối phó với mã khó hiểu như:
#include "test_Test.h"
JNIEXPORT jint JNICALL Java_test_Test_getDoubled(JNIEnv *env, jclass clz, jint n) {
return n * 2;
}
Thứ hai, nó có xu hướng hạ thấp vai trò một trong những lý do chính tại sao bạn sử dụng Java ở nơi đầu tiên: Wora (Viết Một lần, Run Anywhere). Như duffymo đã đề cập, cũng có thể có vấn đề với bộ thu gom rác, nhưng tôi nghĩ rằng trong những năm gần đây, JVM đã khá thông minh về tích hợp JNI.
Với điều đó đã nói, để chuyển tất cả mã C++ của bạn sang JNI, bạn cần phải cấu trúc lại giao diện của mình (và thậm chí có thể thực hiện một số thể dục dụng cụ bên trong). Nó không phải là không thể, nhưng nó thực sự không được khuyến khích. Giải pháp lý tưởng chỉ là viết lại mã của bạn bằng Java.
Với điều đó đã nói, bạn cũng có thể "chuyển đổi" mã của bạn từ C/C++ thành Java theo chương trình, và có rất nhiều tiện ích như vậy. Nhưng, tất nhiên, máy móc có nhiều gỗ hơn mọi người và chúng cũng bị ràng buộc phạm sai lầm, tùy thuộc vào mức độ phức tạp của lớp học của bạn.
Nguồn
2011-01-12 02:58:34
Vấn đề chung của bạn không thể dễ dàng được giải quyết; chuyển đổi từng lớp C++ một lần vào các lớp Java thông qua JNI là khá khó khăn. Tại sao bạn muốn sử dụng các lớp C++ này trong Java? Có lý do nào bạn phải sử dụng Java nhưng muốn có chức năng hiện tại? – templatetypedef
Tôi không muốn mất chức năng của C++. Nó thực hiện một số chức năng mà Java không thể tự làm và tôi không biết làm thế nào để làm tất cả mọi thứ trong Java. Vì vậy, tôi muốn tích hợp C++ của tôi bên trong Java. :-) :-) –
"... Nó thực hiện một số chức năng mà Java không thể tự làm ..." - Tôi xin chân thành hỏi câu này. "Không thể làm"? Bằng chứng, xin vui lòng. – duffymo