我正在使用JNI使我的java程序使用C库,但是本机方法调用太晚了。
这是我的代码:
public class QuadcopterClient{
static {
try {
System.loadLibrary("MPU6050");
System.out.println("libMPU6050.so loaded.");
} catch (UnsatisfiedLinkError e) {
System.err.println("Couldn't load MPU6050: " + e.toString());
}
}
public native void HelloWorld();
public static void main(String argv[]) {
System.out.println("Trying invoke native method");
QuadcopterClient qc = new QuadcopterClient();
for (int i = 0; i < 10; i++) {
qc.HelloWorld();
}
System.out.println("Method invoked.");
Thread.sleep(2500);
}
然后我运行它
pi@raspberrypi ~/local/quadcopterClient $ java -jar -Djava.library.path=. dist/quad*
libMPU6050.so loaded.
Trying invoke native method
Method invoked.
Hello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello worldHello world
您可以看到节目结尾处出现“Hello world”。
QuadcopterClient类放在“quadcopterclient”花坛中:
pi@raspberrypi ~/local/quadcopterClient/src $ ls
AccGyroModule ClientServerModule ControlerModule MotorsModule quadcopterclient SharedLibrary
请问为什么? THX
答案 0 :(得分:1)
stdout
已缓冲。您需要调用fflush(stdout);
,或者可能在邮件中添加换行符,以便线路缓冲刷新它,如果它有效。