Abaixo está o componente JNative
jnative.sourceforge.net/ Clique aqui para baixar o projeto de código aberto JNative que baixei 1.3.2.
Descompacte JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" mês="12" ano="1899">1.3.2</st1:chsdate>.zip
Obtenha três arquivos, a saber: JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll é usado no Windows, copie-o para o diretório windows/system32;
libJNativeCpp.so no Linux, copie para o diretório do sistema;
JNative.jar Este é um pacote de extensão. Importe-o para o projeto LIB ou copie-o para jdk/jre/lib/ext e o sistema o carregará automaticamente.
•Instruções de uso
Meu projeto usará componentes JNative para chamar um arquivo TestAppSvr.dll que testa o status do servidor de aplicativos. O arquivo DLL contém um método TestConnect() que retorna um resultado inteiro (1 ou 0).
Primeiro configure o ambiente Windows do componente JNative:
Coloque o JNativeCpp.dll que o Native precisa usar em /WINDOWS/system32 no disco do sistema
Importe JNative.jar para o projeto e crie uma nova classe de chamada:
código java
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar java.io.InputStream;
importar org.xvolks.jnative.JNative;
importar org.xvolks.jnative.Type;
importar org.xvolks.jnative.exceptions.NativeException;
classe pública AppSvrTestConnect {
public AppSvrTestConnect() {
}
/**
* Teste o status da conexão do servidor de aplicativos
*
*TestConnect
* @param ip IP do servidor de aplicação
* @param porta porta
* @param intrcpt Se deve usar o método de compactação de dados 1:true 0:false
* @return int 1: sucesso 0: falha
* @throws NativeException
* @throws IllegalAccessException
*/
private static final int TestConnect(String ip, int port, int intrcpt)throws NativeException, IllegalAccessException {
JNativo n = nulo;
tentar {
n = novo JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Tipo.INT);
int eu = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + porta);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invoke();
return Integer.parseInt(n.getRetVal());
} finalmente {
se (n! = nulo)
n.dispose();
}
}
/**
* Especifique o caminho do arquivo DLL, carregue dinamicamente a biblioteca de link local e teste o status da conexão do servidor de aplicativos
* setDllPath
* @param path O caminho para o arquivo DLL, excluindo o nome da DLL. Por exemplo: windows - d:/test/test/ unix - root/test/test/.
* @param ip IP do servidor de aplicação
* @param porta porta
* @param intrcpt Se deve usar o método de compactação de dados 1:true 0:false
* @return int 1: sucesso 0: falha
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) lança NativeException, IllegalAccessException{
caminho += "TestAppSvr.dll";
System.load(caminho);
return TestConnect(ip,porta,intrcpt);
}
/**
* O arquivo DLL é colocado no diretório JRE/bin e o ClassLoader pode carregar dinamicamente a biblioteca de link local por meio de System.loadLibrary()
* TestConnectFromDllPath
* @param ip IP do servidor de aplicação
* @param porta porta
* @param intrcpt Se deve usar o método de compactação de dados 1:true 0:false
* @return int 1: sucesso 0: falha
* @throws NativeException
* @throws IllegalAccessException
*/
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) lança NativeException, IllegalAccessException{
System.loadLibrary("TestAppSvr");
return TestConnect(ip,porta,intrcpt);
}
}
Esta classe implementa um método privado estático, que é usado para chamar métodos em arquivos DLL e retornar resultados.
private static final int TestConnect(String ip, int port, int intrcpt)
Dois métodos públicos estáticos, carregando arquivos DLL de duas maneiras
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //Caminho através do arquivo DLL
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) //Através do ClassLoader Em seguida, crie uma nova classe e chame AppSvrTestConnect.java. Assim que o método for chamado, coloco o arquivo TestAppSvr.dll e Demo.java no mesmo diretório, para que depois de obter o caminho do Demo.java, eu possa obter o caminho. de TestAppSvr.dll e chame AppSvrTestConnect.Tes As informações corretas podem ser retornadas após o método tConnectFromDllPath(). O segundo método é colocar TestAppSvr.dll no diretório Jre/bin, que será carregado automaticamente no Classloader da JVM, e depois através de System.loadLibrary("TestAppSvr"). Arquivos DLL podem ser montados.
código java
String path=getClass().getResource(File.separator).getPath();
caminho = caminho.substring(1,caminho.comprimento());
System.out.println(path); //Obter o caminho do arquivo DLL
String ip = "192.168.0.48"; //IP do servidor
int porta = 221;
int intrcpt = 1; //Compressão de dados é transmitida, 1 significa usá-la; 0 significa não usá-la;
//Método 1 Passar o caminho do arquivo DLL
//int info = AppSvrTestConnect.TestConnectFromDllPath(caminho, ip, porta, intrcpt);
//Método 2 O arquivo DLL foi colocado no diretório JRE/bin
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, porta, intrcpt);
//1 é sucesso, 0 é falha
se (informações == 1)
System.out.println("Servidor de aplicação disponível.");
outro
System.out.println("O servidor de aplicação não está disponível, verifique se o endereço IP e a porta estão corretos.");
informações de retorno;
}
System.loadLibrary(): carrega a biblioteca de link local no diretório Windows/System32 ou jre/bin ou Tomcat/bin
System.load(): Adicione a biblioteca de link local de acordo com o diretório específico, que deve ser um caminho absoluto
•Observação
O projeto de exemplo acima, por ser um exemplo, não possui muito design. Ele apenas implementa o carregamento do arquivo DLL, chamando o método do arquivo DLL e retornando informações.
Para obter instruções detalhadas sobre JNative, consulte o programa fonte JNative e exemplos.
Observe que a JVM permite apenas que um ClassLoader padrão carregue a biblioteca nativa e não fornece uma API especial para descarregar uma biblioteca nativa carregada, portanto, ao depurar o projeto, inicie o servidor Web de forma independente.