Programa não executa corretamente ao gerar o .jar

6 respostas
Filipe_A

Bom dia!

Tenho um programinha em java que tem como resource um arquivo .exe
Esse programa ao ser executado copia esse .exe para uma pasta no sistema e executa ele, quando termina a execução ele apaga este programa.
Dentro do Eclipse funciona perfeitamente, quando gerei o .jar ele até chega a copiar o programa para a pasta desejada mas não executa-o.

Alguém poderia me ajudar, por favor?
Obrigado. Filipe.

Eis o código do programa:

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

public class Main {

	public Main() throws Exception {
		// TODO Auto-generated constructor stub

		InputStream src = this.getClass().getResourceAsStream("/resources/MeuPrograma.exe");
		if (src != null) {
			File exeTempFile = File.createTempFile("MeuPrograma", ".exe", new File("C:\\SistADI\\sist\\infantil"));
			byte[] ba = new byte[src.available()];
			src.read(ba, 0, ba.length);
			exeTempFile.deleteOnExit();
			FileOutputStream os = new FileOutputStream(exeTempFile);
			os.write(ba, 0, ba.length);
			os.close();

			String[] args = new String[3];
			args[0] = exeTempFile.getAbsolutePath();
			System.out.println(exeTempFile.getAbsolutePath());
			args[1] = "One";
			args[2] = "Two";
			Process ps = Runtime.getRuntime().exec(args);
			ps.waitFor();
			InputStream is = ps.getInputStream();
			byte b[] = new byte[is.available()];
			is.read(b, 0, b.length);
			System.out.println(new String(b));
		} else
			System.out.println("Executable not found");
	}

	public static void main(String[] args) throws Exception {
		new Main();
	}

}

6 Respostas

qmvini

Não sei o que pode estar acontecendo, mas acho que pode ser no seu InputStream, pois você passa um caminho relativo, não pode estar dando erro ali?

Filipe_A

qmvini,

Olá, obrigado pela ajuda, onde exatamente você diz que o caminho está relativo?
Neste código o arquivo é executado antes de chegar na parte do InputStream…

Att,
Filipe.

Filipe_A

Pessoal, ainda não consegui resolver, se alguém souber pra me ajudar. Ou se tiver alguma outra solução para o que eu preciso (Ter um .exe como resource, criar um temp dele e executá-lo e depois de finalizado apagá-lo).

Obrigado. Filipe.

ViniGodoy

E não dá nenhuma exception?

Filipe_A

Olá ViniGodoy,

Não aparece nenhuma exception, o programa chega a copiar o .exe para o local mas não executa-o nem apaga-o depois.
Pelo Eclipse funciona normalmente.

Obrigado.

Filipe_A

Obrigado pela ajuda qmvini e ViniGodoy;
Resolvi meu problema usando a API da Apache Commons IO.

Att,
Filipe.

package mypack;

import java.io.File;
import java.io.InputStream;

import org.apache.commons.io.FileUtils;

public class Main {

	public Main() throws Exception {
		// TODO Auto-generated constructor stub

		InputStream src = getClass().getResourceAsStream("/resources/myApp.exe");

		File exeTempFile = File.createTempFile("myApp", ".exe", new File("myPath"));
		exeTempFile.deleteOnExit();

		FileUtils.copyInputStreamToFile(src, exeTempFile);

		Process ps = Runtime.getRuntime().exec(exeTempFile.getAbsolutePath());
		ps.waitFor();

	}

	public static void main(String[] args) throws Exception {
		new Main();

	}

}
Criado 2 de abril de 2012
Ultima resposta 3 de abr. de 2012
Respostas 6
Participantes 3