Empacotando classes do JAI em um JAR

3 respostas
_

Olá pessoal,

Meu objetivo é criar um programa, utilizando algumas classes de pacotes como a Java Avanced Imaging (JAI) por exemplo, e empacotá-lo em um JAR, mas se possível imbutindo as classes necessárias no JAR, e somente elas, para não precisar acoplar todo o pacote JAI em meu programa.

Usei o Netbeans 6.0.1 (e jdk1.6.0_04) para criar um programa simples para realizar este teste. Eu consigo executá-lo em minha máquina, porém existem dois problemas que não consegui resolver:

1 - Eu consigo executar o JAR com clique-duplo, porém ele só funciona corretamente quando invocado via 'java - jar'. Com a invocação por linha de comando, ele executa, mostra a mensagem, le a imagem e gera o arquivo de saída, no mesmo diretório, sem problemas. Porém via clique duplo ele apenas mostra a mensagem FOO, e não gera a saída. Já verifiquei meu sistema pois achei q a saída poderia estar indo para outra pasta, mas não encontrei nenhum arquivo de saída.

2 - Deixando de lado o problema da invocação, e chamando-o pela linha de comando, ele está funcional. Porém quando tentei rodá-lo em uma outra máquina, com a jre1.6.0_03 instalada, para verificar se realmente ele nao estava precisando dos componentes JAI, eu também consigo executá-lo e recebo a mensagem FOO na tela, porém recebo o erro:

C:\Documents and Settings\Administrador\Desktop>"C:\Arquivos de programas\Java\jre1.6.0_03\bin\java.exe" -jar JavaApplication4.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/jai/JAI
at javaapplication4.Main.main(Main.java:26)

e a parte do código que supostamente carregaria a imagem e salvaria não funciona, ou seja, ele executa, mostra a msg FOO mas não carrega a imagem.

Estou confuso com esta situação de o código executar parcialmente... já fiz várias buscas porém sem sucesso, pois não estou sabendo ao certo onde está o problema.

PS: A classe Main de meu projeto está definida. Relembro que em minha máquina eu consigo executá-lo normalmente quando o invoco por 'java -jar' e também não estou esquecendo de copiar o arquivo teste de imagem para a pasta do jar.
Em anexo estou postando o arquivo JAR para caso seja pertinente alguma análise do arquivo de MANIFEST.

Qualquer ajuda será bem vinda,

Obrigado a todos,

_dude

public static void main(String[] args) {

         JOptionPane.showMessageDialog(null, "foo");
         
         PlanarImage image = JAI.create( "fileload" , "futurama.jpg");
         
         JAI.create( "filestore" ,image, "futurama.bmp" );
    }

3 Respostas

T

O JAI usa código nativo e tem uma estrutura complexa, portanto não dá para mandar só algumas classes. Se puder, mande o instalador do JAI, que deve copiar as DLLs e outras coisas para os lugares corretos.

_

Thingol,

Isto apesar de não ser uma meta idel, é uma opção viável, e caso tiver problemas com o empacotamento a levarei em conta.

O detalhe é que instalei o JAI (jai-1_1_3-lib-windows-i586.exe) no pc destino que estou fazendo os testes, e mesmo assim o problema persistiu, da mesma maneira.

T

Eu prefiro criar um atalho (com ícone e tudo) para uma batch que ficar dependendo da boa vontade do Windows com os arquivos .jar.
É que normalmente eu tenho problemas com .jar, porque às vezes o Winzip acha que ele é que tem de abrir arquivos .jar e não deixa o Java fazer isso direito.
Outras vezes é que a versão do Java que está abrindo arquivos .jar é X mas a versão que preciso é Y.
Outra coisa mais chata é que se você der um duplo-clique em um .jar, não sei qual é o diretório corrente que o Windows usa para iniciar o Java; normalmente o Java acaba não encontrando os .jar de que seu programa depende.
Portanto, eu prefiro criar explicitamente um atalho (usando um instalador, por exemplo) que faça exatamente o que eu quero, não o que o Windows acha que tem de fazer.

Criado 27 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 3
Participantes 2