日期:2014-05-20  浏览次数:20918 次

多线程访问jni接口的问题!
我的java主程序通过调用一个C++库来完成相应的工作。用jni接口来访问C++   dll。jni接口写在一个名为Magicube的类中。Magicube的定义如下:
package   nari.pmds.simulator;

/**
  *   Magicube   PMDS   Simulation   Platform
  *   @author   xdl2000
  *   @version   1.0.0
  *
  */
public   class   Magicube   {

static
{
System.loadLibrary( "pmds_core ");
}


                  ...
                 
                  //其中的一个接口函数
                  public   native   boolean   hasMustSubmitOrPopups(int   iSimulator);
}


现在是这样的,我的主程序调用完magicube的一个native   method之后,另起一个新线程访问magicube.hasMustSubmitOrPopups(int   iSimulator);

我的线程类是这样定义的:
package   nari.pmds.server;

import   nari.pmds.client.PMDS;
import   nari.pmds.simulator.Magicube;


public   class   CheckWindowThread   extends   Thread   {

/*   运行标志   */
private   boolean   runflag   =   true;

/*   暂停标志   */
private   boolean   paused   =   false;

                  /*   Magicube!!   */
private   Magicube   m   =   new   Magicube();

public   CheckWindowThread()   {

}

/**
  *   重载Thread.run()函数,当线程被Start时自动调用
  */
public   void   run()   {
while   (runflag)   {

                                                      /*   在这里调用的jni接口!!!   */
boolean   b   =   m.hasMustSubmitOrPopups(PMDS.project.getISimulator());
System.out.println( "CheckWindowThread   running...   hasMustSubmitOrPopups?   "   +   b);
try   {
sleep(1000);
}   catch   (InterruptedException   e)   {
System.out.println( "sleep:: "   +   e);
}
synchronized   (this)   {
try   {
if   (paused)
wait();
}   catch   (InterruptedException   e)   {
System.out.println( "wait:: "   +   e);
}
}
}
System.out.println( "CheckWindowThread   over... ");
}


/**
  *   继续运行线程
  */
public   synchronized   void   setResume()   {
paused   =   false;
notify();
}

/**
  *   暂停线程
  */
public   synchronized   void   pause()   {
paused   =   true;
}

/**
  *   终止进程,终止后无法再启动
  */
public   void   interrupt()   {
runflag   =   false;
super.interrupt();
System.out.println( "MyThread   is   interrupted! ");
}

}


线程是运行起来了,但是报错:
Exception   in   thread   "Thread-7 "   java.lang.UnsatisfiedLinkError:   hasMustSubmitOrPopups
at   nari.pmds.simulator.Magicube.hasMustSubmitOrPopups(Native   Method)