Erro ao tentar criar uma aplicação usando JNI

2 respostas
C

Oi gente.

Estou estudando JNI seguindo um livro e estou me deparando com o seguinte erro abaixo:

java.lang.UnsatisfiedLinkError: no JNIPrintWrapper in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517)
	at java.lang.Runtime.loadLibrary0(Runtime.java:788)
	at java.lang.System.loadLibrary(System.java:834)
	at codigofonte.JNIPrintWrapper.<clinit>(JNIPrintWrapper.java:10)
	at codigofonte.JNIPrintMain.main(JNIPrintMain.java:11)
Exception in thread "main"

não sei o que é.

O meu codigo é bem simples mais não sei como resolver esse erro, a IDE que estou usando é o eclipse.

Abaixo estou colocando os codigos criados.

package codigofonte;

//Reserva acesso ao metodo native
// and loads a library and declarea a native method


public class JNIPrintWrapper {

	static{
		System.loadLibrary("JNIPrintWrapper");
	}
	
	//native c++ method
	public native void printMessagem(String message);

}
// Creates a new instance of the Java wrapper class,
// and calls the native methods.

package codigofonte;

public class JNIPrintMain {

	// uses JNI to print a message
	public static void main(String args[]) {
		
		JNIPrintWrapper wrapper = new JNIPrintWrapper();

		// call to native methods through JNIWrapper
		wrapper.printMessagem("Welcome to JNI!\n");
	}

}
#include<jni.h>



//Cabeçalho para classe JNIPrintWrapper
//JNIPrintWrapper.h header file generated by javah.


#ifndef _Included_JNIPrintWrapper
#define _Included_JNIPrintWrapper
#ifdef __cplusplus
extern "C"{
	
#endif

/*
* Class: JNIPrintWrapper
* Method: printMessage
* Signature: (Ljava/lang/String;)V
*/

JNIEXPORT void JNICALL Java_JNIPrintWrapper_printMessage
(JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif
// Fig. G.3 JNIPrintWrapperImpl.cpp
// Implements the header created by Java
// to integrate with JNI.


//JNIPrintWrapperImpl.cpp implements the javah header to print
//a message.

// C++ core header
#include <iostream.h>


#include "JNIPrintWrapper.h"

// prints string provided by Java application

JNIEXPORT void JNICALL Java_JNIPrintWrapper_printMessage
( JNIEnv * env, jobject thisObject, jstring message )
	{
		
		jboolean copied;
		
		const char* charMessage = env->GetStringUTFChars( message, &copied );
		
		//print message
		cout << charMessage);
		
		//release string to prevent memory leak
		env->ReleaseStringUTFChars( message, charMessage );

		
	}

2 Respostas

J

Se estiver usando windows:

Tente pegar o arquivo JNIPrintWrapper.dll e colocar em windows/system32.

A

Um meio de configurar a “java.library.path” em qualquer SO é usar:
java -Djava.library.path=<diretório_arquivo_.dll_ou_.so> classe_java
assim a VM saberá onde encontrar os arquivos gerados pela JNI.

Criado 10 de julho de 2006
Ultima resposta 20 de jul. de 2006
Respostas 2
Participantes 3