FORUM DARKERS

Tecnologia & Informática => Programação => Java => Topic started by: Alucard on 20 de May , 2007, 02:11:38 PM

Title: Tutorial Nativo Java
Post by: Alucard on 20 de May , 2007, 02:11:38 PM
Olá, vou tentar explicar algo, bem interessante em java.
Java é uma linguagem multi-plataforma, ou seja, roda em qualquer
sistema operacional, mas java tem suas restrições, como por
exemplo, não poder acessar o registro do windows, usar apis
dentro outras restrições...

Mas para resolver esse problemas a sun, fez uma "melhoria"
incluindo JNI (Java Native Interface), com isso você pode
programar para o sitema operacional, e não para a máquina
virtual. Para mais informações sobre JNI consulte:

http://www.javafree.org/javabb/viewtopic.jbb?t=13913 (http://www.javafree.org/javabb/viewtopic.jbb?t=13913)
http://java.sun.com/j2se/1.4.2/docs/guide/jni/ (http://java.sun.com/j2se/1.4.2/docs/guide/jni/)

Bem o meu objetivo nesse tutorial não é explicar como fazer
JNI em java, mas sim como fazer uma aplicação nativa dentro
de um código em java, como por exemplo uma biblioteca ou
até mesmo um executável, ficar dentro de uma aplicação java.

Juntando isso com a multi-plataforma de java, poderia
ser criado um trojam multi-plataforma, com apenas um
"executável", byte code.

O básico é: colocar um arquivo, dentro de um vetor.
Em java é possivél tem um vetor de bytes, e baseado
nisso gravar esse vetor em disco. Pois é isso que vou fazer.

Primeiramente, vamos criar um arquivo executavel nativo.
Eu escolhi uma aplicação bem simples feita em vb6, mas
poderia ser qualquer tipo de aplicação, essa minha aplicação
ele apenas aparece um form, nada mais.

O segundo passo agora é transformar a cadeia de bytes do
arquivo em vetor, de bytes. Para isso criei uma aplicação
simples que me fornesse essa informação, ainda está incompleta
mas, vai atender a nossa necessidade. Os códigos fontes, está
disponivel no link abaixo, usei a IDE NetBeans:

http://geocities.yahoo.com.br/alucard_d ... oVetor.zip (http://geocities.yahoo.com.br/alucard_dxs/TutorialNativoJava/BinarioVetor.zip)

O uso dessa ferramente é bastante simples, abrar um arquivo
que deseja incluir no arquivo java, demora um pouco para carregar,
mas quando terminar, será mostra uma classe chamada Binario1 que
contém um vetor, e o metodo main.

(//http://br.geocities.com/alucard_dxs/TutorialNativoJava/TelaPrincipal.JPG)

Lembrando que uma classe java tem um tamanho máximo, ou seja,
tem um número restrito de linhas, não sei ao certo a quantiade,
por isso aconçelho que para essa fase de teste abra um arquivo
bem pequeno. Quando esse erro ocorre aparece algo do tipo:

"C:\Documents and Settings\Danilo\Meus documentos\Projetos\Java\BinarioVetor\src\Binario1.java:5: code too large
public class Binario1 {
1 error
FALHA NA EXECUÇÃO (tempo total: 3 segundos)"

(//http://br.geocities.com/alucard_dxs/TutorialNativoJava/ErroTamanhoArquivo.JPG)

Bem para resolvermos esse problema, é só criar um outra classe java
e criar outro vetor, selecionando um pedaço do vetor que esta na
classe 1 colocamos o restante na classe 2, apenas dividimos o vetor
em classes. Deixa cada classe com aproximadamente 500 linhas.

Após abrir o arquivo e ser gerado o código-fonte, peça para salvar
o código-fonte, eu fiz algo simples. Será gerado no c:\ um aquivo
chamado Binario1.java.

Agora compile e execute, esse arquivo. Será gerando novamente o arquivo
que você pediu para incluir, mas com outro nome, Saida.(extenção do arquivo).

Estou disponiblizando o exemplo citado a cima, no qual apenas aparece um form
feito em vb6, o link dessa aplicação e os códigos-fontes estão em

http://geocities.yahoo.com.br/alucard_d ... xemplo.zip (http://geocities.yahoo.com.br/alucard_dxs/TutorialNativoJava/Exemplo.zip)

Nesse exemplo, para ver se funciona execute apenas "java Binario1"
ele retorna uma menssagem de texto dissendo que o arquivo foi gerado.

(//http://br.geocities.com/alucard_dxs/TutorialNativoJava/CompilacaoCorreta.JPG)

Acesse o c:\ e encontre um arquivo chamada Saida.exe. Pronto o arquivo foi gerado
apartir de uma classe java.

(//http://br.geocities.com/alucard_dxs/TutorialNativoJava/CodigoGerado.JPG)

Pronto, imagine agora você cria uma dll, em c, com funções nativas para
um sitema operacional, e usando JNI, você terá o controle total da maquina
atravez de um executável e usando a portabilidade de java, poderiamos
verificar qual é o sistema operacional e incluir o arquivo para o sistema adequado.

Espero ter ajudado... ;)