O meu programa tem um método para gerar um .jar, mas eu só consigo executar o .jar gerado depois de fechar o meu programa.
Se eu usar duas threads, será q eu consigo fazer o .jar funcionar?
Eu não entendo muito de threads. Será que alguém pode me ajudar?
Como eu faço uma thread para executar o meu program e outra thread para gerar o arquivo jar?
Não precisa criar outra thread. Para carregar um .jar após o aplicativo ser carregado, você terá que se informar sobre ClassLoaders.
E
entanglement
Andr?a:
O meu programa tem um método para gerar um .jar, mas eu só consigo executar o .jar gerado depois de fechar o meu programa.
Você está fechando o arquivo jar corretamente, após criá-lo?
Andr_a
entanglement:
Você está fechando o arquivo jar corretamente, após criá-lo?
Como eu faço para fechar o jar? Acho que é esse mesmo o problema, pois o jar criado só fica completo depois q eu encerro o meu programa!
Andr_a
ViniGodoy:
Não precisa criar outra thread. Para carregar um .jar após o aplicativo ser carregado, você terá que se informar sobre ClassLoaders.
Vini, eu não sei como usar ClassLoaders para resolver o meu problema.
Não sei se ficou claro, mas o problema é que o jar criado só é concluído depois q eu fecho o programa. E só então eu consigo executá-lo.
Tu acha que tem como ele concluir o jar antes de fechar o meu programa? Tu tem um exemplo de como fazer isso?
mcirqueira
Pra fechar o jar, use o método close(). Por eemplo, apos criar o .jar:
JarEntryarqJar......;// Fechando o arquivo jararqJar.close();
mcirqueira
Dê uma olhada nessa classe:
importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.util.jar.JarEntry;importjava.util.jar.JarOutputStream;importjava.util.jar.Manifest;publicclassCreateJarFile{publicstaticintBUFFER_SIZE=10240;protectedvoidcreateJarArchive(FilearchiveFile,File[]tobeJared){try{bytebuffer[]=newbyte[BUFFER_SIZE];// Open archive fileFileOutputStreamstream=newFileOutputStream(archiveFile);JarOutputStreamout=newJarOutputStream(stream,newManifest());for(inti=0;i<tobeJared.length;i++){if(tobeJared[i]==null||!tobeJared[i].exists()||tobeJared[i].isDirectory())continue;// Just in case...System.out.println("Adding"+tobeJared[i].getName());// Add archive entryJarEntryjarAdd=newJarEntry(tobeJared[i].getName());jarAdd.setTime(tobeJared[i].lastModified());out.putNextEntry(jarAdd);// Write file to archiveFileInputStreamin=newFileInputStream(tobeJared[i]);while(true){intnRead=in.read(buffer,0,buffer.length);if(nRead<=0)break;out.write(buffer,0,nRead);}in.close();}out.close();stream.close();System.out.println("AddingcompletedOK");}catch(Exceptionex){ex.printStackTrace();System.out.println("Error:"+ex.getMessage());}}}
mcirqueira achei essa classe muito interessante. Gostaria de implementá-la no meu programa, mas não consigo colocar pacotes dentro do jar desta forma, pois dá erro.
Tem como fazer o jar receber pacotes?
Andr_a
Andr?a:
mcirqueira achei essa classe muito interessante. Gostaria de implementá-la no meu programa, mas não consigo colocar pacotes dentro do jar desta forma, pois dá erro.
Tem como fazer o jar receber pacotes?