Hola chico, k tal??
me encuentro con el problema de implementar las funciones nativas en el netbeans usando package.
he implementado el metodo nativo en el netbeans pero sin uso de los package, y a sido todo un exito, pero al momento de incluir mi programa java en el package, genero mi clase desde una terminal, despues genero mi libreria .h donde tengo que hacer referencia de mi package Ejemplo:
1er paso:
Tengo mi proyecto "Cliente", donde creo un package "Externo", ingreso mi programa java "usoJava.java", ejecuto mi programa desde una terminal:
javac usoJava.java
me genera mi usoJava.class
2do. paso:
despues genero mi .h
javah -jni usoJava
el hacer esto me detecta un error. El error se me genera porque el codigo de mi programa java, tiene "package Externo", entonces me salgo de esa carpeta y me posiciono en la capeta src, donde se encuentran todas los package, y desde mi terminal tecleo:
jni -jni Cliente.usoJava
y se me genera mi .h pero afuera de mi package "Externo",. Guardo mi programa .C en esa carpeta que es src, y creo mi libreria .so.
Me posiciono nuevamente en mi carpeta "Externo"para ejecutar mi programa java, porque se supone que todo ya esta creado y me sale error:
Exception in thread "main" java.lang.NoClassDefFoundError: LlamarFacedetect (wrong name: usopackage/LlamarFacedetect)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java :638)
at java.security.SecureClassLoader.defineClass(Secure ClassLoader.java:143)
at java.net.URLClassLoader.defineClass(URLClassLoader .java:281)
at java.net.URLClassLoader.access$000(URLClassLoader. java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java: 216)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:209)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 24)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 69)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:337)
Error: Could not find the main class.
Error: A JNI error has occurred, please check your installation and try again
mi programa java es :
package usopackage;
/**
*
* @author gsanchez
*/
public class LlamarFacedetect {
public native void called();
static { System.load("/home/gsanchez/NetBeansProjects/usoPackage/src/libfacedetect.so"); }
public void llamar(){
called();
}
public static void main(String[] args){
LlamarFacedetect objeto = new LlamarFacedetect();
objeto.llamar();
}
}
el programa .h que se genera:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class usopackage_LlamarFacedetect */
#ifndef _Included_usopackage_LlamarFacedetect
#define _Included_usopackage_LlamarFacedetect
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: usopackage_LlamarFacedetect
* Method: called
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_usopackage_LlamarFacedetect_called
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
y mi programa C es:
#include <jni.h>
#include "usopackage_LlamarFacedetect.h"
#include <stdlib.h>
#include <stdio.h>
JNIEXPORT void JNICALL
Java_JNI_LlamarFacedetect_called(JNIEnv *env, jobject obj)
{
system("/home/gsanchez/NetBeansProjects/Cliente/src/Cliente/facedetect");
return;
}
Por favor , agradeceria mucho su ayuda, y de sus conocimientos, Como hacerlo dentro de un package!!! GRACIAS!!