Gần đây tôi đã thử nghiệm với JNI, để chuyển một số thư viện C++ hiện có.Các cuộc gọi JNI xen kẽ với các cuộc gọi Java thông thường - lệnh thực thi là gì?
Là một phần của thử nghiệm của tôi, tôi đã tạo một chương trình 'helloworld' đơn giản. Tôi đang gọi một hàm gốc đơn giản trong C++, mà chỉ cần in các thông báo. Tôi là một chút tò mò về một số hành vi tôi đã quan sát thấy trong khi thực hiện chương trình - có vẻ như tất cả các tin nhắn chức năng bản địa/phản ứng được in sau khi Java System.out.print
của. Đây có phải là vì các cuộc gọi bản địa được thực thi sau khi các cuộc gọi Java, hay tôi sẽ bỏ qua hành vi này?
public static void main(String[] args) {
HelloWorld app = new HelloWorld();
System.out.println("say");
app.print();
System.out.println("what");
app.print();
}
Kết quả trông như thế này:
say
what
hola, world !
hola, world !
Chức năng bản địa như sau:
Java_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("hola, world !\n");
return;
}
Có fflush sau khi in trong mã gốc tạo sự khác biệt? –
bạn có nghĩa là fflush (stdout); ?? cuz tôi đã thử điều đó và đưa ra cùng một đầu ra. Cảm ơn –
oh xin lỗi, tôi đã cập nhật phương pháp gốc sai. Yeah sử dụng fflush (stdout) tạo nên sự khác biệt. Cảm ơn. –