Hail a todos.
Estou trabalhando com Java/CouchDB e tenho a seguinte situação:
- Com o evento de um JButton quero dar start no servidor executando um .bat, a princípio criei um método para execução do mesmo, compilando a aplicação na hora em que eu clicava no botão minha aplicação travava, ou seja, o runtime ficava encima da execução do .bat, dessa forma nunca iria conseguir manipular o restante da aplicação.
Como solução criei uma tread na qual fica responsável pela execução do meu .bat, tudo funcionou perfeitamente do jeito que eu queria.
Agora entra a questão da minha dúvida, da mesma forma que tenho uma JButton para start do server, preciso de um JButton para parar o .bat, ja tentei dar interrupt na thread mas mesmo assim o processo não para, foi então que tive em mente a seguinte ideia:
- É possível no InputStream do meu processo eu inserir o comando Ctrl+C, a letra S e depois ENTER para que assim o .bat pare de executar?
Segue codificação da minha thread:
package com.fourspaces.couchdb.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author samuel.silveira
*/
public class MyThread extends Thread {
private Process p = null;
private Runtime r = null;
private String path = "C:\\Program Files (x86)\\Apache Software Foundation\\CouchDB\\bin\\couchdb.bat";
public void stopProcess(){
byte[] b = new byte[] {3};
try {
p.getInputStream().read(b);
} catch (IOException ex) {
Logger.getLogger(MyThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
public MyThread() {}
@Override
public void run(){
try{
p = r.getRuntime().exec(path);
while(!Thread.interrupted()) {
InputStream in = p.getInputStream();
int ch;
while ((ch = in.read()) != -1) {
System.out.print((char)ch);
}
}
} catch (IOException ex) {
Logger.getLogger(MyThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Desde já agradeço.