Olá pessoas, então eu criei um programa em C++ e estou rodando ele em uma interface gráfica em java com o ProcessBuilder(parametros).start(). O programa é basicamente consiste em o usuário escolher a instância e depois apertar o botão de “Solucionar” e nisso é chamado o programa em C++ para resolver o problema. Porém o programa demora alguns segundos para resolver a instância, variando esse tempo de acordo com a instância escolhida, eu criei uma dialog como forma de aviso que o programa ainda estava no processo de resolução, mas quando o process termina o dialog não fecha sozinho mesmo eu usando alguns métodos como .dispose(); .disable(); .setVisible(false) entre outros… e também não libera para que a solução seja impressa num JTextArea, enquanto eu não clico no “ok” do Jdialog. Enfim, vcs poderiam me ajudar? Acho que não estou sabendo verificar quando e onde o processo de fato termina. Segue em baixo o trecho do código.
String[] param = new String[3];
param[0] = "/home/ricardo/NetBeansProjects/InterfacePLR/src/results/exe";
param[1] = caminhoArquivo.getText();
param[2] = caminho.getAbsolutePath();
Process process = null;
JOptionPane pane = new JOptionPane("Programa em execução, não desligue a máquina!");
JDialog dialog = pane.createDialog(null, "AVISO" );
try {
process = new ProcessBuilder(param).start();
while(process.isAlive())
dialog.setVisible(true);
if(!process.isAlive())
dialog.getOwner().dispose();
} catch (IOException ex) {
Logger.getLogger(Tela.class.getName()).log(Level.SEVERE, null, ex);
}
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String linha, solucao = "\n";
try {
while ((linha = br.readLine()) != null) {
solucao += linha;
solucao += "\n";
}
campoSolucao.setText(solucao);
} catch (IOException ex) {
Logger.getLogger(Tela.class.getName()).log(Level.SEVERE, null, ex);
}