Executar JAR gerado sem fechar o programa

8 respostas
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.
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?

É um programa para gerar programas Java. Para quem quiser baixar, é gratuito e está disponível aqui: http://ateoriadadesevolucao.blogspot.com.br/p/software-j-planet.html

8 Respostas

ViniGodoy

Não precisa criar outra thread. Para carregar um .jar após o aplicativo ser carregado, você terá que se informar sobre ClassLoaders.

E

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:

JarEntry arqJar......;

// Fechando o arquivo jar
arqJar.close();
mcirqueira

Dê uma olhada nessa classe:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;

public class CreateJarFile {
  public static int BUFFER_SIZE = 10240;
  protected void createJarArchive(File archiveFile, File[] tobeJared) {
    try {
      byte buffer[] = new byte[BUFFER_SIZE];
      // Open archive file
      FileOutputStream stream = new FileOutputStream(archiveFile);
      JarOutputStream out = new JarOutputStream(stream, new Manifest());

      for (int i = 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 entry
        JarEntry jarAdd = new JarEntry(tobeJared[i].getName());
        jarAdd.setTime(tobeJared[i].lastModified());
        out.putNextEntry(jarAdd);

        // Write file to archive
        FileInputStream in = new FileInputStream(tobeJared[i]);
        while (true) {
          int nRead = in.read(buffer, 0, buffer.length);
          if (nRead <= 0)
            break;
          out.write(buffer, 0, nRead);
        }
        in.close();
      }

      out.close();
      stream.close();
      System.out.println("Adding completed OK");
    } catch (Exception ex) {
      ex.printStackTrace();
      System.out.println("Error: " + ex.getMessage());
    }
  }
}

Para mais informações: [url]http://www.java2s.com/Code/Java/File-Input-Output/Jar-File.htm[/url]

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?

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?

Achei um método para colocar pacotes dentro do JAR.
Fiz um exemplo para quem tiver a mesma dúvida: http://ateoriadadesevolucao.blogspot.com/2012/06/criar-arquivo-jar-com-jaroutputstream.html

Criado 22 de maio de 2012
Ultima resposta 19 de jun. de 2012
Respostas 8
Participantes 4