Fechar Winamp e Acrobat via código

Srs, bom dia, todos blz ?

Será que vcs pódem me ajudar ? Caso sim, tenho um programa que ao clicar num botão, ele abre o winamp para tocar uma musica escolhida em um listbox, gostaria de ter um outro botão para desligar o winamp, via código em Java.

No mesmo programa tenho uma Jtable que ao dar um click no nome de uma musica da lista, abre um arquivo em PDF, no Adobe Acrobat e gostaria tambem de um botão que feche este arquivo em PDF, abaixo vou colocar os dois códigos onde abro estes programas.

Abrir Winamp

nome = txtpmusica.getText();
Runtime r = Runtime.getRuntime();
r.exec("cmd /c C:\\MUSICPLAY\\musicas\\Mp3\\\"" + nome + "\".mp3");

Adobe Acrobat Pro

private void tblmusicasMouseClicked(java.awt.event.MouseEvent evt) {                                        
  // clicou na tabela
  int linha = tblmusicas.getSelectedRow();
  txtmusica.setText(tblmusicas.getValueAt(linha, 0).toString());
  
  try {
    File pdfFile = new File("c:\\MusicPlay\\MusicasPdfTeclado\\" + txtmusica.getText() + ".pdf");
    
    if (pdfFile.exists()) {
      if (Desktop.isDesktopSupported()) {
        Desktop.getDesktop().open(pdfFile);
      } else {
        System.out.println("Awt Desktop não disponível");
      }
    } else {
      System.out.println("Arquivo Pdf inexistente");
    }
    
    System.out.println("Done");
  } catch (Exception ex) {}
}

// Variables declaration - do not modify                     
private javax.swing.JButton Btnsair;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel9;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable tblmusicas;
private javax.swing.JLabel txtmusica;
// End of variables declaration                   

Se alguém puder me ajudar, ficarei muito grato, fiquem com Deus.

Veja um exemplo onde um processo é iniciado e finalizado depois de um determinado tempo:

import java.io.IOException;

public class Main {

	public static void main(String[] args) throws Exception {
		try {
			// inicia um processo e obtém o id do processo (nesse exemplo, o "xed" é um editor de texto do linux)
			long pid = execute("xed", "%U");
			
			// simula uma espera de 2 segundos
			Thread.sleep(2000);
			
			// Mata o processo pelo ID (esse é um comando do linux, no caso de windows teria que pesquisar como fazer isso)
			execute("kill", "-9", pid + "");
		} catch (IOException ex) {
			System.err.println("Não foi possível executar o processo: " + ex.getMessage());
		}
	}
	
	private static long execute(String ... comandos) throws IOException {
		ProcessBuilder pb = new ProcessBuilder(comandos);
		Process p = pb.start();
		return p.pid();
	}
}

Outra forma melhor é usar o método destroy junto com waitFor da classe Process.

1 curtida

Lucas, Primeiramente, muito obrigado pelo pronto atendimento, continuo com a minha duvida, não entendi o código que vc fez como exemplo, poderia explicar melhor como eu fecho pelo menos o “Winamp” via um botão com código do Java? O Acrobat eu ja resolvi.

OBS : Para abrir o winamp eu utilizei um código com 3 linhas, dica dada por vcs, mas agora não sei como fecha-lo.

nome = txtpmusica.getText();
Runtime r = Runtime.getRuntime();
r.exec(“cmd /c C:\MUSICPLAY\musicas\Mp3\”" + nome + “”.mp3");

Obrigado -

Armando Barbosa

Refiz o exemplo usando waitFor e destroy numa thread separada:

public class MainExecutarProcesso {

	public static void main(String[] args) throws Exception {
		ExecutadorProcesso runTextEditor = new ExecutadorProcesso("xed", "%U");
		Thread t1 = new Thread(runTextEditor);
		t1.start();
		Thread.sleep(3000);
		runTextEditor.stop();
	}
}
public class ExecutadorProcesso implements Runnable {
	
	private String[] commands;
	private Process process;
	
	public ExecutadorProcesso(String ... commands) {
		this.commands = commands;
	}

	@Override
	public void run() {
		try {
			ProcessBuilder pb = new ProcessBuilder(commands);
			this.process = pb.start();
			this.process.waitFor();
		} catch (IOException | InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public void stop() {
		this.process.destroy();
	}
}

Cara, boa tarde, agradeço seu pronto atendimento e resolução do meu problema,
Vlw mesmo ! Fique com Deus, show !!!

Conseguiu?