Tôi có một plugin Eclipse (A) có phụ thuộc vào một plugin (B) khác. Plugin B chỉ đơn giản là một trình bao bọc xung quanh một cái lọ, chứa một dll bản địa, và thực hiện chức năng jni. Với thiết lập này, tôi có đoạn mã sau vào phương pháp bắt đầu của một lớp Activator của:Làm thế nào tôi có thể chuyển hướng đầu ra giao diện điều khiển JNI sang giao diện điều khiển Eclipse, khi trình cắm thêm Eclipse sử dụng JNI?
MessageConsole jniConsole = new MessageConsole("Opereffa Output", null);
ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { jniConsole });
ConsolePlugin.getDefault().getConsoleManager().showConsoleView(jniConsole);
MessageConsoleStream stream = jniConsole.newMessageStream();
System.setOut(new PrintStream(stream));
System.setErr(new PrintStream(stream));
Khi cắm A thực hiện chức năng của nó, việc sử dụng System.out thực sự đi vào giao diện điều khiển trong Eclipse. Nhưng mã nguồn gốc được JNI sử dụng cũng ghi vào luồng đầu ra mà tôi không thể lấy được. Trong quá trình phát triển, đầu ra từ JNI chuyển đến bàn điều khiển của cá thể Eclipse đã khởi chạy cá thể đang chạy, chứa các trình bổ sung.
Vậy làm cách nào để lấy đầu ra JNI và hiển thị trong bảng điều khiển?
Chức năng nào ghi nhật ký trong mã gốc? printf, fprintf, puts? ... Bạn có thể tự do viết lại mã, thay đổi chức năng ghi nhật ký không? –
Vì JNI có liên quan: Làm thế nào di động phải là một giải pháp? Trên nền tảng nào nó hoạt động ít nhất? –