Java JNI - 在main()中调用本机方法太晚了

时间:2014-03-26 00:15:15

标签: java java-native-interface

我正在使用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

1 个答案:

答案 0 :(得分:1)

stdout已缓冲。您需要调用fflush(stdout);,或者可能在邮件中添加换行符,以便线路缓冲刷新它,如果它有效。