0

我已经在类->头文件中停留了几天!

我已经通过http://netbeans.org/kb/docs/cnd/beginning-jni-linux.htmlhttp://ringlord.com/jni-howto.html在客户端上尝试了 jni 。它成功地从 JNI 的 (.cpp) 文件中返回“hello JNI C++”。这是我的步骤:

  1. 创建本机函数并在 client.java
  2. 在 Netbeans IDE 上清理并构建这个 client.java,然后生成一个 client.class 文件
  3. javah –jni [包].[类名]
  4. 像第一个参考一样创建一个动态库 C++ 项目,并将 client.h 放入源文件,并将一些 hello 代码放入 (.cpp) 文件 --->它可以工作!

但是,我尝试在 servlet 端做同样的事情,但它不起作用

  1. Servlet.java->Servlet.class:好的!
  2. Servlet.class->Servlet.h:失败!!! 错误:无法访问 javax.servlet.GenericServlet 类文件,找不到 javax.servlet.GenericServlet

以下是我迄今为止找到并尝试过的解决方案,

  • 检查包名

  • sudo gedit /etc/profile,sudo gedit .bashrc,sudo /etc/environment;在它们上添加 JAVA_HOME & CLASSPATH,并获取它们以更新,然后 echo $JAVA_HOME, echo $CLASSPATH 进行验证

  • 从http://www.jarfinder.com/index.php/java/info/javax.servlet.GenericServlet下载 servlet-api-6.0.14.jar & servlet-api-5.0.16.jar ,并添加以上两个( .jar) 通过 netbeans IDE->server->property->libraries->Add JAR

请告诉我如何解决这个问题,非常感谢!顺便说一句,我正在使用 hessianServlet

4

1 回答 1

2

NativeWrapper.java(你javah只在这个类上运行)

class NativeWrapper {
  // either
  static {
    System.loadLibrary("MyOpenCVNative");
  }
  // or
  public NativeWrapper() {
    System.loadLibrary("MyOpenCVNative");
  }
  public native void callNative();
}

MyServlet.java

class MyServlet extends javax.servlet.GenericServlet {
  private NativeWrapper nativeWrapper = new NativeWrapper();

  public void someServletMethod() {
    nativeWrapper.callNative();
  }
}
于 2012-10-31T13:50:13.987 回答