Jni

8 respostas
T

e ae galera
estou fazendo uma aplicação para ler dados de uma balança e depois gerar uma etiqueta

estou usando jni para ler a dll que o fabricante fornece

Alguem tem dicas ?

recebo a seguinte mensagm ao tentar executar um metodo da dll

Exception in thread “main” java.lang.UnsatisfiedLinkError: br.com.house.jni.LePeso.AlteraModeloBalanca(I)V

at br.com.house.jni.LePeso.AlteraModeloBalanca(Native Method)

at br.com.house.jni.LePeso.main(LePeso.java:18)

8 Respostas

Andre_Fonseca

Oi,

Caso você esteja usando loadLibrary troque para load usando o caminho completo da DLL e copie ela para um local acessivel no path do Projeto…

Veja se ajuda…

T

Ola andre , primeiro muito obrigado pela sua ajuda
fiz o q vc disse ajudou sim

mas ainda da erro

java.lang.UnsatisfiedLinkError: C:\Documents and Settings\tveiga\workspace\balanca\Le_PesoImpl.dll: Uma rotina de inicialização da biblioteca de vínculo dinâmico (DLL) falhou

at java.lang.ClassLoader$NativeLibrary.load(Native Method)

at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1674)

at java.lang.Runtime.load0(Runtime.java:770)

at java.lang.System.load(System.java:1005)

at br.com.house.jni.LePeso.(LePeso.java:11)

Exception in thread main

acho q é o arquivo c que esta incorreto

#include "jni.h"
#include <stdio.h>
#include "br_com_house_jni_LePeso.h"

JNIEXPORT jint JNICALL Java_br_com_house_jni_LePeso_AbrePortaSerial(JNIEnv *env, jobject obj , jstring str) 
{
        return 1;                                     
}
Andre_Fonseca

Coloca seu código java para chamar a DLL …

T
public class LePeso {
 
	public native int AbrePortaSerial(String PortaSerial);
	
	static {
		
		System.load("C:\\Documents and Settings\\tveiga\\workspace\\balanca\\Le_PesoImpl.dll");
	}
	
	public static void main(String[] args) 
	{
		LePeso lePeso = new LePeso();
		int resp = lePeso.AbrePortaSerial("COM1");
		System.out.println(resp);
	}
}
Andre_Fonseca
Thiago veiga:
#include "jni.h"
#include &lt;stdio.h&gt;
#include "br_com_house_jni_LePeso.h"

JNIEXPORT jint JNICALL Java_br_com_house_jni_LePeso_AbrePortaSerial(JNIEnv *env, jobject obj , jstring str) 
{
        return 1;                                     
}

Oi

Tente mudar este código para

JNIEXPORT jint JNICALL Java_br_com_house_LePeso_AbrePortaSerial(JNIEnv *env, jobject obj , jstring str) 
{
        return 1;                                     
}

Acho que não precisa do jni.
Certifique-se de que a classe está no pacote correto também br.com.house.LePeso

M

Da uma olhada nos parametros do seu compilador para gerar JNI, tive um problema parecido e coloquei uns parametros a mais no compilador e tudo funcionou

T

tirando todos os includes do arquivo c , nao consigo gerar a dll tirando apenas o #include ‘jni.h’ o erro continua o mesmo

com relaçao ao pacote o nome do pacote br.com.house e o nome da classe LePeso

T

para gerar o arquivo .h usei o comando

javah - jni br.com.house.LePeso

para gerar a dll usei o comando

C:\Documents and Settings\tveiga\workspace\balanca>cl -I “c:\Arquivos de program
as\Java\jdk1.6.0_13\include” -I “c:\Arquivos de programas\Java\jdk1.6.0_13\inclu
de\win32” -LD -MD Le_PesoImpl.c -FeLe_PesoImpl.dll

este comando da dll so funcionou depois de instalar o visual studio c++ express edition

Criado 18 de dezembro de 2009
Ultima resposta 18 de dez. de 2009
Respostas 8
Participantes 3